Правильное перенаправление HTTP на HTTPS с использованием Django и Nginx - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь перенаправить свой сайт с HTTP на HTTPS, и мне это частично удалось. Дело в том, что когда я набираю mywebsite.fr, я получаю имя службы контейнера, который содержит код веб-сайта в моей адресной строке (например, Django app /) с ошибкой DNS_PROBE_FINISHED_NXDOMAIN.

ТеперьЯ попробовал то же самое с другим браузером Chrome другого компьютера, и на этот раз, когда я набираю www.mywebsite.fr, я получаю тот же результат, тогда как не-www правильно перенаправляется на безопасный адрес.

Наконец, я попыталсяточно такой же процесс, используя мой смартфон (Brave) с www и non-www, я получаю https://djangoapp с ошибкой ERR_NAME_NOT_RESOLVED, тогда как, когда я явно набираю https:\\mywebsite, у меня не возникает проблем.

ТакВот часть NGINX, которая перенаправляет на сервер HTTPS:

    server {
            ...

            location / {
                    return 301 https://djangoapp$request_uri;
            }
    }

Это местоположение на сервере HTTPS, которое относится к восходящему потоку:

server {
           ...

           location / {
                    ...

                    proxy_pass http://djangoapp;
            }
   }

И это службакоторый запускает код:

  djangoapp:
    build: .
    ports:
      - "8000:80"
    links:
      - db
    depends_on:
      - db

Я еще не освоил все тонкости NGINX, и я не очень понимаю, что я делаю здесь неправильно. Любое решение или советы по этому вопросу у меня есть?

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Вы возвращаете URL-адрес приложения django, а не перенаправляете его в свой блок http nginx.

В вашей части http конфигурации:

 server {
     return 301 https://$host$request_uri;
     listen 80;
 }

И в https, когда прокси-сервер проходит, еслиВы не хотите, чтобы URL-адрес изменился на URL-адрес вашего приложения django, вы должны добавить proxy_set_header Host $http_host;. Также полезно добавить несколько дополнительных заголовков, таких как IP-адрес. Таким образом, общий блок сервера будет выглядеть так:

server {
    location / {
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_pass http://djangoapp;
    }
}
0 голосов
/ 13 октября 2019

Моя проблема была решена, потому что мой proxy_set_header X-Forwarded-Proto был установлен на $https вместо https. Использование $scheme в соответствии с предложением также работает нормально.

Прочитав комментарий @ mehrad и немного поискав в Интернете, я обнаружил ошибку, объясняющую, почему перенаправление не работает должным образом. Это также включает использование $host вместо djangoapp.

...