我無法找到如何正確設置nginx
,所以我的超鏈接由DRF API構建是正確的。錯誤的超鏈接Django Rest框架與複雜堆棧使用SSL,AWS負載平衡器,Nginx和Gunicorn
我給nginx
當前配置是:
upstream web {
ip_hash;
server web:8000;
}
# portal
server {
listen 8000;
server_name localhost;
location/{
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://web/;
}
}
nginx
被一個容器中運行暴露端口8000
,並將其映射到內部運行gunicorn(也在容器中)也上8000
。所以當我旋轉整個碼頭機械時,我可以很好地訪問localhost:8000/api
並且鏈接呈現OK。即使我使用不同的域訪問它(例如,如果我在/etc/hosts
:127.0.0.1 mytest.com
中設置),URL和端口也會正確傳遞給DRF,並且鏈接按預期呈現。
但是,此服務必須使用SSL使用證書坐在AWS Load Balancer後面。此LB上的主機名設置爲otherdomain.com
,它將流量重定向到使用端口8000上的HTTP運行上述nginx
的計算機。然後,當嘗試使用https://otherdomain.com/api
訪問它時,鏈接呈現爲http://otherdomain.com:8000/api/
< - 因此錯誤scheme
(http代替https )和錯誤的端口(8000而不是80/443)。這是有道理的,因爲nginx
不知道什麼原始請求來負載平衡器...
沒有我能想到的想法聽起來正確。將不勝感激任何幫助。當然,我願意改變基礎設施。
任何想法如何解決這個問題?
你添加到你的settings.py中了嗎? 'SECURE_PROXY_SSL_HEADER =( 'HTTP_X_FORWARDED_PROTOCOL', 'https' 時)' 和 'SECURE_SSL_REDIRECT =不DEBUG' –
即解決的是,由於 – kotrfa