我有一個Django應用程序,最近我需要啓動一個測試版本。我希望保持當前正在運行的應用程序不變,並在Nginx的幫助下將所有以「/ beta」開頭的請求重定向到測試版應用程序。這是我的conf如何在使用Nginx作爲代理服務器時正確處理重定向響應,django作爲後端
location/{
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 360;
proxy_pass http://localhost:8000/;
}
location /beta/ {
rewrite ^/beta/(.*)$ /$1 break;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 360;
proxy_pass http://localhost:8001/;
}
這工作,但有一個問題,當應用程序返回一個301響應,大多是當用戶需要登錄訪問某些資源的URL變成舊的。例如,/events
需要登錄。
http://example.com/beta/events - >http://example.com/login?next=/events/
我怎麼能解決這個問題無需更改應用程序代碼? (Nginx解決方案?)
你不應該在django後端/中間件而不是nginx中處理它嗎? – karthikr
使用子域beta.example.com是一個更好的解決方案,對我來說 –
我是否正確理解您正在使用Django的內置開發服務器作爲代理的後端?你真的不應該這樣做。如果你使用的是uwsgi,你的問題會有一個非常簡單的解決方案(並且你的應用會更快) –