在我昨晚部署我的Django应用程序后,我收到了大量奇怪的电子邮件:
ERROR: Invalid HTTP_HOST header: '/webapps/example_com/run/gunicorn.sock
upstream example_app_server { server unix:/webapps/example_com/run/gunicorn.sock fail_timeout=0; } server { listen 80; server_name example.com; client_max_body_size 4G; access_log /webapps/example_com/logs/Nginx-access.log; error_log /webapps/example_com/logs/Nginx-error.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://example_app_server; break; } } }
通过防火墙创build可见的本地服务器
破损的pipe道仅在第二次发送时closures套筒
如何使用socat proxy拦截Unix域套接字发送辅助数据?
C ++套接字窗口
select套接字输出接口:SO_BINDTODEVICE vs绑定之前连接
检查连接是否打开或closures?(在Linux中的C)
Linux:如何更改进程可以打开的最大文件数?
Linux内核中的TCP调用stream程
PACKET_TX_RING只发送第一个数据包,然后不再做任何事情
我在django bug报告中找到了我的问题的答案。
proxy_set_header Host $http_host;
必须替换为:
proxy_set_header Host $host;
使Nginx通过正确的头,而不是在gunicorn套接字请求的页面是在Django警报。
这个人基于这个相同的职位来解释一下更多的事情。 这是他/她的解释:
…当向服务器发出请求并且HTTP主机为空时,Nginx将HTTP主机设置为gunicorn sock。
curl -H "HOST:" MY_DOMAIN_NAME -0 -v
这发送一个没有HTTP主机的请求。 -0会导致curl使用HTTP版本1.0。 如果你没有设置,请求将使用HTTP版本1.1,这将导致请求立即被拒绝,不会产生错误。
解决的办法是用$ host替换$ http_host(就像在Stackoverflow中指出的那样)。 当缺少HTTP主机时,$ host将采用“server_name”指令的值。 这是一个有效的域名,是应该使用的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。