У меня в качестве интерфейсного веб-сервера Nginx прослушивается порт 80. И для определенных запросов я настроил nginx для обратного прокси-сервера на веб-сервере mochiweb, который я написал, прослушивая порт 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]);
По сути, это приложение COMET, где пользователи подключаются к mymochiserver, а сервер передает данные всем подключенным клиентам. Если нет данных для отправки с сервера, я перехожу в этот процесс. А потом, когда проснулся, я вызываю функцию подачи, чтобы отправить данные. И если я удаляю код гибернации, все работает хорошо, и я вижу вывод в браузере. Но если я сплю, это не сработает. Есть идеи, что не так?