NGINX 리버스 프록시 사용자 정의 MOCHIWEB 애플리케이션
-
06-07-2019 - |
문제
포트 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에 연결하고 서버가 연결된 모든 클라이언트에 데이터를 푸시하는 혜성 응용 프로그램입니다. 서버에서 전송 될 데이터가 없으면 프로세스를 최대 절전 모드합니다. 그런 다음 깨어 났을 때 피드 기능을 호출하여 데이터를 보냅니다. 최대 절전 모드를 제거하면 모든 것이 잘 작동하며 브라우저에서 출력이 있습니다. 하지만 최대 절전 모드를한다면 작동하지 않습니다. 무슨 일이 일어나고 있는지 아십니까?
해결책
결정된!
프록시 버퍼링을 끄고 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에 감사드립니다!