我在 Centos 6 机器上部署了 Nginx/Gunicorn/Django 服务器,只有 SSL 端口(443)对外界可见。因此,除非使用 调用服务器,否则https://
您不会得到任何响应。如果您使用 调用它http://domain:443
,您只会收到 400 Bad Request 消息。端口 443 是访问服务器的唯一途径。
我正在使用 Nginx 来提供我的静态文件(CSS 等),所有其他请求都由 Gunicorn 处理,它在http://localhost:8000
. 因此,导航到https://domain.com
工作正常,管理站点中的链接也是如此,但是当我在 Django 管理中提交表单时,重定向时 https 丢失,我被发送到http://domain.com/
request_uri 无法到达服务器。即使如此,POST 操作也能正常工作,并且数据库已更新。
我的配置文件如下所示。位置location /
部分是我觉得应该找到解决方案的地方。proxy_set_header X-*
但这些指令似乎没有任何效果。我错过了一个模块还是什么?我正在运行 nginx/1.0.15。
我在互联网上可以找到的所有内容都指向X-Forwarded-Protocol https
它应该做的事情,但我没有得到任何改变。我也无法在远程服务器上进行调试,尽管我的下一步可能必须在本地编译并启用调试以获得更多线索。最后的手段是公开端口 80 并重定向所有内容……但这需要一些文书工作。
[http://pastebin.com/Rcg3p6vQ](我的 nginx 配置参数)
server {
listen 443 ssl;
ssl on;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/key.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name example.com;
root /home/gunicorn/project/app;
access_log /home/gunicorn/logs/access.log;
error_log /home/gunicorn/logs/error.log debug;
location /static/ {
autoindex on;
root /home/gunicorn;
}
location / {
proxy_pass http://localhost:8000/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol https;
}
}