我有Nginx作为我的前端Web服务器在端口80上侦听。并且某些请求,我已经设置了nginx来反向代理它到我写的基于mochiweb的Web服务器,在端口8000上侦听。我的这个的nginx配置如下所示:

location /mymochiserver {

            proxy_pass         http://127.0.0.1:8000;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;

            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }

现在,当我访问网址 http:// localhost / mymochiserver 时,我看不到回复浏览器。浏览器只是说“等待localhost”。 mymochiserver将一些跟踪打印到运行它的终端窗口,每当用户连接到它时,现在,我确实看到我打开的每个浏览器窗口的跟踪以连接此URL。但我没有看到任何我希望看到写入浏览器的输出。但是,当我直接访问URL http://127.0.0.1:8000/ 时,一切正常,我在浏览器上看到mymochiserver的输出。所以它直接调用时有效。但是当通过nginx反向代理时,它似乎不起作用。知道什么可能是错的吗?


更新: 在我的Mochiweb应用程序中,我有以下几行代码:

Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
proc_lib:hibernate(?MODULE, feed, [Response, Userid, 1]);

它基本上是一个COMET应用程序,用户将连接到mymochiserver,服务器将数据推送到所有连接的客户端。如果没有数据要从服务器发送,我会暂停该过程。然后当我醒来时,我调用feed函数发送数据。如果我删除休眠代码,一切正常,我在浏览器中看到输出。但如果我做休眠,它就行不通。知道出了什么问题吗?

有帮助吗?

解决方案

固定!

参考: http://timanovsky.wordpress.com/2009/01/09/toward-a-million-user-long-poll-http-application-nginx-erlang-mochiweb/

我不得不关闭代理缓冲并增加nginx中的proxy_read_timeout以使其正常工作。所以我的配置文件现在看起来像这样:

location /mymochiapp {
            proxy_pass         http://127.0.0.1:8000;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         3600;

            proxy_buffering off;
        }

谢谢thomas55指出答案!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top