【问题标题】:Nginx Reverse Proxy to custom Mochiweb applicationNginx 反向代理到自定义 Mochiweb 应用程序
【发布时间】:2010-11-03 15:10:48
【问题描述】:

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

现在,当我访问 URL http://localhost/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,服务器将数据推送到所有连接的客户端。如果没有要从服务器发送的数据,我会休眠该进程。然后当我醒来时,我调用 feed 函数来发送数据。如果我删除休眠代码,一切正常,我会在浏览器中看到输出。但如果我休眠,它就不起作用。知道出了什么问题吗?

【问题讨论】:

    标签: erlang nginx reverse-proxy


    【解决方案1】:

    已修复!

    参考: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 指出答案!

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 2019-08-09
      • 2021-02-04
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多