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?

Foi útil?

Solução

Fixed!

Referência: http://timanovsky.wordpress.com/2009/01/09/toward-a-million-user-long-poll-http-application-nginx-erlang-mochiweb/

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top