Django

來自 nginx/Apache HTTPS 代理配置錯誤的 Django 重定向不正確

  • December 7, 2011

我對 Web 開發還很陌生,所以我知道我在伺服器配置上犯了一個初學者錯誤。我有一個 nginx 伺服器,它位於為 Django 請求提供服務的 Apache 伺服器前面。我有某些需要登錄的視圖(通過 @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

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

&lt;IfModule mod_gnutls.c&gt;
Listen 443
&lt;/IfModule&gt;

好吧,這需要很長時間才能解決。我在我的 nginx ports.conf 中改變了這個:

proxy_redirect off;

對此:

proxy_redirect http://localhost:8080/ /

讓我感到害怕的是,我使用的所有範例似乎都關閉了 proxy_redirect,但我想我會保持這種方式,直到有人可以提供更好的答案。

引用自:https://serverfault.com/questions/338381