由于 nginx/Apache HTTPS 代理配置错误,导致 Django 重定向不正确

由于 nginx/Apache HTTPS 代理配置错误,导致 Django 重定向不正确

我对 Web 开发还很陌生,所以我知道我在服务器配置方面犯了一个初学者错误。我在为 Django 请求提供服务的 Apache 服务器前面有一个 nginx 服务器。我有一些需要登录的视图(通过 @login_required 装饰器),如果用户在未登录的情况下访问其中一个视图,Django 会自动将用户重定向到 /accounts/login/。这在 http 上工作正常,但在 https 上它会将我重定向到 Apache 的本地 IP 地址。例如,不是重定向到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>

答案1

好吧,这个问题花了很长时间才解决。我在 nginx ports.conf 中做了以下修改:

proxy_redirect off;

更改为:

proxy_redirect http://localhost:8080/ /

我使用的所有例子似乎都关闭了 proxy_redirect,这让我有点害怕,但我想我会保持这种状态,直到有人能提供更好的答案。

相关内容