2009-06-17 6 views
4

Nginx를 포트 80에서 수신하는 프런트 엔드 웹 서버로 사용합니다. 특정 요청은 필자가 작성한 mochiweb 기반 웹 서버에 프록시를 역전시키기 위해 nginx를 설정했습니다 이 경우 포트 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는 사용자가 연결할 때마다 터미널 창이 실행되는 터미널 창에 일부 추적을 인쇄합니다. 그리고 지금 당장이 URL을 연결하기 위해 여는 각 브라우저 창에 대한 추적을 봅니다. 그러나 나는 브라우저에 출력되는 것을 기대하지 않는다. 하지만 URL http://127.0.0.1:8000/에 모두 직접 액세스하면 브라우저에서 mymochiserver의 결과를 볼 수 있습니다. 따라서 직접 호출 할 때 작동합니다. 하지만 nginx를 통해 역방향 프록시를 사용하면 작동하지 않는 것 같습니다. 어떤 생각이 잘못 될 수 있습니까?


업데이트 : 그것은 기본적으로 사용자가 mymochiserver에 연결하는 COMET 응용 프로그램입니다 및 서버의 모든 데이터를 밀어

Socket = Req:get(socket), 
inet:setopts(Socket, [{active, once}]), 
proc_lib:hibernate(?MODULE, feed, [Response, Userid, 1]); 

: 내 Mochiweb 응용 프로그램에서 나는 코드 줄이 연결된 클라이언트. 서버에서 전송할 데이터가 없으면 프로세스를 최대 절전 모드로 전환합니다. 그런 다음 깨어 났을 때 피드 기능을 호출하여 데이터를 보냅니다. 최대 절전 모드 코드를 제거하면 모든 것이 잘 작동하고 브라우저에서 결과를 볼 수 있습니다. 하지만 내가 최대 절전 모드를 실행하면 작동하지 않습니다. 어떤 생각이 잘못 됐어?

답변

4

고정!

참조 : 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님께 고마워요!