Django
來自 nginx/Apache HTTPS 代理配置錯誤的 Django 重定向不正確
我對 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 <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,但我想我會保持這種方式,直到有人可以提供更好的答案。