2009-06-17 82 views
4

我有Nginx作为我的前端Web服务器侦听端口80.并且某些请求,我设置了nginx来将其代理反向代理到我写的基于mochiweb的Web服务器,在端口8000听我的nginx的配置,这看起来是这样的:Nginx反向代理到自定义Mochiweb应用程序

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; 
     } 

现在,当我访问URL http://localhost/mymochiserver我没有看到浏览器的响应。浏览器只是说“等待本地主机”。无论何时用户连接到mymochiserver,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和服务器数据推到所有的连接客户端。如果没有数据要从服务器发送,我休眠该过程。然后当唤醒时,我会调用馈送功能发送数据。如果我删除了休眠代码,一切正常,我在浏览器中看到输出。但是,如果我休眠,它不起作用。任何想法出了什么问题?

回答

4

固定!

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

我过了关代理缓冲和增加proxy_read_timeout在nginx的,使其工作。所以我的配置文件看起来像这样:

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指出了答案!