Nginx proxy reverso para aplicativo personalizado Mochiweb
-
06-07-2019 - |
Pergunta
Eu tenho Nginx como minha escuta servidor web front-end na porta 80. E certos pedidos, eu configurar nginx para proxy reverso para um servidor web mochiweb base que eu tenho escrito, ouvindo na porta 8000. Meu configuração nginx para isso se parece com isso:
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;
}
Agora, quando eu acessar a URL http: // localhost / mymochiserver Eu não vejo uma resposta na navegador. O navegador apenas diz "Waiting for localhost". mymochiserver imprime algum traço para a janela de terminal a partir do qual ele é executado, sempre que um usuário se conecta a ele, e agora, eu vejo o rastreio para cada janela do navegador eu abrir para conectar este URL. Mas eu não vejo nenhuma da saída Estou esperando para ver sendo escrito para o navegador. MAS, quando eu acessar diretamente a URL http://127.0.0.1:8000/ tudo funciona bem, e Eu vejo a saída do mymochiserver no navegador. Então, ele funciona quando chamado diretamente. Mas quando reverse-proxy através nginx, não parece estar funcionando. Alguma idéia do que pode estar errado?
Update: Na minha aplicação Mochiweb eu tenho essas linhas de código:
Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
proc_lib:hibernate(?MODULE, feed, [Response, Userid, 1]);
É basicamente um aplicativo COMET onde os usuários se conectarão ao mymochiserver eo servidor empurra para fora de dados para todos os clientes conectados. Se não houver dados a serem enviados a partir do servidor, eu hibernar o processo. E então, quando acordou, eu chamar a função feed para enviar os dados. E se eu remover o código de hibernação, tudo funciona bem, e eu ver uma saída no navegador. Mas se eu hibernar, ele não funciona. Alguma idéia do que está acontecendo de errado?
Solução
Fixed!
Eu tive que desligar o buffer proxy e aumentar a proxy_read_timeout em nginx para torná-lo trabalho. Então meus configuração olhares de arquivo como este agora:
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;
}
Obrigado thomas55 por apontar a resposta!