Как я могу изменить http на https в django rest browsable api, когда я использую apache2 + gunicorn - PullRequest
0 голосов
/ 05 января 2019

Настройка

  • Apache2 в качестве обратного прокси
  • Gunicorn служит приложение для отдыха Джанго
  • Gunicorn + приложение Django + MySQL в докере

Теперь проблема в доступном для просмотра API, gunicorn обслуживает приложение на http://0.0.0.0:8000, но я использую https://example.com/, как в конфигурации Apache. Каждая ссылка в API, доступном для просмотра, имеет вид http://xxxxx.

При переходе по ссылке он перенаправляется на протокол http, в результате чего получается 404.

Как настроить приложение gunicorn или django на использование https в доступном для просмотра API?

Edit:

команда gunicorn: gunicorn -w 3 waxis_topup_api_django.wsgi -b 0.0.0.0:8000 --reload

setting.py - обычный файл без каких-либо специфических ссылок на http / https

apache config:

<VirtualHost *:443>
ServerAdmin xxx
ServerName example.com
Alias "/static" "/path/static"
ProxyPass "/static/" !
ProxyPass "/" "http://localhost:8000/"
ProxyPassReverse "/" "http://localhost:8000/"
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
SSLEngine On
</VirtualHost>

Текущее решение (решение?)

Я могу думать только об этом, чтобы заставить любой http быть https, поэтому даже если в просматриваемом API есть ссылка HTTP, он будет перенаправлен на https через apache. Я не знаю, правильно ли это, но для меня это больше похоже на взлом.

Вот мой конфиг в apache

<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>

1 Ответ

0 голосов
/ 05 января 2019

Вероятно, один из веб-серверов промежуточного программного обеспечения (apache или ngninx или оба) не перенаправляет хост, поэтому Django не понимает имя хоста, на котором он обслуживается.

Для Apache вам необходимо:

ProxyPreserveHost on

и для nginx вам нужно:

proxy_set_header Host $host;

Это заставит apache и nginx пересылать имя хоста, и django будет его использовать.

...