我有一个用Django构建的webapp.我目前正在路由器后面的笔记本电脑上运行它.
我将路由器配置为将发送到特定端口的所有流量路由到该笔记本电脑.
我有Nginx作为Apache的反向代理,使用mod_wsgi来运行Django.
我的问题是:当我尝试提交任何POST表单时,端口#将从URL中删除(例如209.245.23.201:1552/login/变为209.245.23.201/login/)
自然,这打破了.导致这种情况的原因(Nginx,Apache,Django?)以及如何解决?
提前致谢.
编辑:似乎表单提交,但我认为重定向失败.
编辑2:问题肯定是Nginx,或Nginx和Apache之间的交互.我尝试使用Apache作为唯一的服务器,运行django,它运行正常.所以要么Nginx正在放弃端口,要么以某种方式Apache被Nginx充当代理而感到困惑.无论如何
我的开发服务器遇到了同样的问题.在一些互联网搜索之后,我发现了这个讨论(nginx,apache和奇怪的管理员错误),其中解决方案是修改nginx的代理配置.
要修改的配置设置为:
proxy_set_header Host $host;
解决方案是添加端口号:
proxy_set_header Host $host:$server_port;
在我的ngnix + apache2(与工人mpm)+ django现在一切正常.
您希望传递到达nginx的原始HTTP主机标头:
proxy_set_header Host $http_host;
这似乎是Debian/Ubuntu中nginx的默认配置的一个错误,它只使用$host
:$host
不包含$server_port
.(这是/etc/nginx/proxy_params
针对Debian/Ubuntu软件包配置的,您可以在包含它之后在配置中覆盖它.)
请注意,$host:$server_port
不同于$http_host
.有关说明,请参见http://wiki.nginx.org/HttpCoreModule#.24host.
报告并在Debian中修复:http://bugs.debian.org/733016
鉴于你所关注的一切都是清晰的HTTP(例如AJP之类的东西),我会在主机上运行一个协议分析器,如Wireshark,并确定引入重定向的位置.