Назад | Перейти на главную страницу

Неправильное перенаправление Django из-за неправильной конфигурации прокси-сервера nginx / Apache HTTPS

Я новичок в веб-разработке, поэтому знаю, что делаю ошибку новичка с конфигурацией моего сервера. У меня есть сервер nginx, расположенный перед сервером Apache, который обслуживает запросы Django. У меня есть определенные представления, которые требуют входа в систему (через декоратор @login_required), и Django автоматически перенаправляет пользователя в / accounts / login /, если они получают доступ к одному из этих представлений без входа в систему. Это отлично работает с http, но с https перенаправляет меня на локальный IP-адрес Apache. Например, вместо перенаправления на https://staging.example.com/accounts/login, Меня перенаправляют на http://127.0.0.1:8080/accounts/login. Нормальные запросы HTTPS работают нормально. Я знаю, что мой nginx и / или apache настроен неправильно, но не знаю, как это сделать.

Вот часть моего файла конфигурации nginx:

server {
 listen   80;
 server_name  staging.example.com;
 root /path/to/staging/example.com/public_html/; 

 try_files $uri @django;

 #set your default location
 location @django  {
  proxy_pass         http://127.0.0.1:8080;
 }
 ...
}

server {

 listen 443;
 ssl on;
 ssl_certificate /path/to/cert-staging.example.com.crt;
 ssl_certificate_key /path/to/staging.example.com.key;
 server_name staging.example.com;

 try_files $uri @django;

 #set your default location
 location @django  {
   proxy_pass         http://127.0.0.1:8080;
   proxy_set_header   X-Forwarded-Protocol https;
 }
 ...
}

Вот часть моего файла Apache:

NameVirtualHost * 
Listen 127.0.0.1:8080

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Что ж, на это ушла целая вечность. Я изменил это в моем nginx ports.conf:

proxy_redirect off;

к этому:

proxy_redirect http://localhost:8080/ /

Меня как бы пугает то, что во всех примерах, которые я использовал, похоже, отключен proxy_redirect, но я думаю, что я сохраню его так, пока кто-то не сможет дать лучший ответ.