我尝试使用ejabberd运行emit(一个gwt实现的xmpp客户端),它运行正常。 我注意到emit的开发人员使用java servlet来代理对ejabberd的请求:
https://github.com/EmiteGWT/hablar/blob/master/src/main/java/de/spieleck/servlets/ProxyServlet.java),
我想绕过这个代理,所以我关注这篇文章:
http://anders.conbere.org/blog/2011/05/03/get_xmpp_-_bosh_working_with_ejabberd_firefox_and_strophe/
但是javascript客户端(从emit开始编译)需要很长时间才能连接到ejabbered,然后快速断开连接,并且nginx错误日志如下:
2012/10/06 17:04:33 [error] 5920#0: *52 upstream timed out (110: Connection timed out) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "POST /http-bind HTTP/1.1",
upstream: "http://111.186.4.11:5280/http-bind", host: "127.0.0.1", referrer: "http://127.0.0.1/hablartest/HablarTest1.html"
有谁可以告诉我我做错了什么?
我的配置: firefox-13 ejabberd-2.1.11 nginx-1.0.5 ubuntu-11.10
(因为与servlent代理相同的客户端代码(从gwt编译的js代码)工作正常,所以我认为它可能是nginx配置问题)
答案 0 :(得分:1)
最后,我发现了问题:我的代理配置如下:
location ~ ^/http-bind {
proxy_pass http://localhost:5280;
}
因此nginx会将所有请求从127.0.0.1:80重定向到localhost:5280
如果我从Internet断开连接,这将正常工作,但如果我连接到Internet,我的主机文件将变为:
127.0.0.1 luya localhost.localdomain localhost
111.186.4.11 luya localhost.localdomain localhost
根据我的理解,localhost将随机被“取”为127.0.0.1或111.186.4.11,因此这引起了混乱。解决方案很简单,更改了代理配置
这
proxy_pass http://localhost:5280;
到
proxy_pass http://127.0.0.1:5280;