2009-06-17 52 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指出了答案!