nginx重写导致重定向循环
问题描述:
我使用nginx与反向代理到我的gunicorn django服务器在本地运行我的django应用程序。nginx重写导致重定向循环
我试图从任何http请求强制ssl,因为该网站只是打算https访问。该应用程序将只收听8888端口(取80和443),所以该站点只能在指定8888端口时访问。
我试图在服务器块和位置块中用这个rewrite^https://domain.net:8888$request_uri? permanent;
重写。它不仅不会将http请求重定向到相同的url,而且在有https请求时也会导致重定向循环。
server {
listen 8888;
server_name sy-system.net;
rewrite^https://domain.net:8888$request_uri? permanent;
ssl on;
ssl_certificate /path/to/domain.pem;
ssl_certificate_key /path/to/domain.key;
# serve directly - analogous for static/staticfiles
location /media/ {
root /path/to/root;
}
location /static/ {
root /path/to/root;
}
location/{
#rewrite^https://sy-system.net:8888$request_uri? permanent;
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 10;
proxy_pass http://127.0.0.1:8881/;
proxy_set_header X-Forwarded-Protocol https;
}
# what to serve if upstream is not available or crashes
error_page 500 502 503 504 /media/50x.html;
}
答
您无条件地从domain.net:8888重定向到domain.net:8888。无限重定向循环是唯一可能的结果。
无论如何,你试图做的事情是不可能的。 Nginx正在谈论SSL,你的浏览器不是,所以它们之间不会有数据传输(这就是为什么当用普通的HTTP连接时你没有获得重定向循环)。当他们谈论(通过SSL)你的重定向循环接管。
耶刚刚实现,谢谢 – zentenk 2012-02-14 12:03:39