2009-06-17 4 views
4

У меня есть Nginx, поскольку мой интерфейсный веб-сервер прослушивает порт 80. И некоторые запросы, я настроил nginx, чтобы отменить прокси-сервер на веб-сервер на основе mochiweb, который я написал , прослушивает порт 8000. Моя конфигурация Nginx для этого выглядит следующим образом:Nginx Reverse Proxy для пользовательского приложения 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, похоже, он не работает. Любая идея, что может быть неправильным?


Update: В моем 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 за то, что вы указали ответ!