문제

포트 80에서 프론트 엔드 웹 서버를 듣고 Nginx를 가지고 있습니다. 특정 요청에 따르면, 내가 작성한 Mochiweb 기반 웹 서버로 Port 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 브라우저에 응답이 표시되지 않습니다. 브라우저는 방금 "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]);

기본적으로 사용자가 MyMochiserVer에 연결하고 서버가 연결된 모든 클라이언트에 데이터를 푸시하는 혜성 응용 프로그램입니다. 서버에서 전송 될 데이터가 없으면 프로세스를 최대 절전 모드합니다. 그런 다음 깨어 났을 때 피드 기능을 호출하여 데이터를 보냅니다. 최대 절전 모드를 제거하면 모든 것이 잘 작동하며 브라우저에서 출력이 있습니다. 하지만 최대 절전 모드를한다면 작동하지 않습니다. 무슨 일이 일어나고 있는지 아십니까?

도움이 되었습니까?

해결책

결정된!

참조: http://timanovsky.wordpress.com/2009/01/09/toward-amillion-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