Domanda

Ho Nginx come server Web front-end in ascolto sulla porta 80. E in alcune richieste, ho impostato nginx per invertire il proxy su un server Web basato su mochiweb che ho scritto, ascoltando su Port 8000. Il mio La configurazione di nginx è simile a questa:

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;
        }

Ora, quando accedo all'URL http: // localhost / mymochiserver non vedo una risposta sul browser. Il browser dice semplicemente "In attesa di localhost". mymochiserver stampa una traccia sulla finestra del terminale da cui viene eseguita, ogni volta che un utente si connette ad essa, e in questo momento, vedo la traccia per ogni finestra del browser che apro per connettere questo URL. Ma non vedo alcun output che mi aspetto di vedere essere scritto sul browser. MA, quando accedo direttamente all'URL http://127.0.0.1:8000/ tutto funziona bene, e Vedo l'output di mymochiserver sul browser. Quindi funziona quando viene chiamato direttamente. Ma quando viene eseguito il proxy inverso tramite nginx, non sembra funzionare. Hai idea di cosa potrebbe esserci di sbagliato?


Aggiornamento: Nella mia applicazione Mochiweb ho queste righe di codice:

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

È fondamentalmente un'applicazione COMET in cui gli utenti si collegheranno a mymochiserver e il server distribuirà i dati a tutti i client connessi. Se non ci sono dati da inviare dal server, metto in letargo il processo. E poi quando mi sveglio, chiamo la funzione feed per inviare i dati. E se rimuovo il codice di ibernazione, tutto funziona bene e vedo l'output nel browser. Ma se faccio il letargo, non funziona. Hai idea di cosa non vada?

È stato utile?

Soluzione

fissi!

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

Ho dovuto disattivare il proxy buffering e aumentare proxy_read_timeout in nginx per farlo funzionare. Quindi il mio file di configurazione ora è così:

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;
        }

Grazie thomas55 per aver indicato la risposta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top