Frage

Ich habe Nginx als meine Front-End-Web-Server auf Port lauscht 80. Und bestimmte Anfragen, ich habe nginx eingerichtet, um Reverse-Proxy an einen mochiweb basierten Web-Server, die ich geschrieben habe, auf Port 8000. Mein nginx-Konfiguration für diese sieht wie folgt aus:

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

Nun, wenn ich Zugriff auf die URL http: // localhost / mymochiserver Ich sehe nicht, eine Antwort auf die Browser. Der Browser sagt nur „Warten auf localhost“. mymochiserver druckt eine Spur zu dem Terminalfenster, von dem es ausgeführt wird, wenn ein Benutzer eine Verbindung herstellt, und in diesem Augenblick, ich die Spur für jeden Browser-Fenster sehe ich diese URL verbinden öffnen. Aber ich sehe nicht, eine der Ausgabe an den Browser Ich erwarte, um zu sehen geschrieben werden. ABER, wenn ich direkt die URL http://127.0.0.1:8000/ alles funktioniert gut, und ich sehe die Ausgabe von mymochiserver auf dem Browser. So funktioniert es, wenn direkt aufgerufen. Aber wenn man durch nginx Reverse-Proxy-Klasse zugänglich, scheint es nicht zu funktionieren. Jede Idee, was falsch sein könnte?


Update: In meiner Mochiweb Anwendung habe ich diese Zeilen Code:

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

Es ist im Grunde eine COMET Anwendung, in der Nutzer auf die mymochiserver verbinden und der Server schiebt Daten an alle angeschlossenen Clients aus. Wenn keine Daten vom Server gesendet werden, Hibernate ich den Prozess. Und dann, als aufgeweckt, nenne ich die Feed-Funktion, die Daten zu senden. Und wenn ich den Ruhecode entfernen, funktioniert alles gut, und ich sehe Ausgabe im Browser. Aber wenn ich überwintern, funktioniert es nicht. Jede Idee, was falsch läuft?

War es hilfreich?

Lösung

Fixed!

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

Ich hatte Proxy-Pufferung auszuschalten und die proxy_read_timeout in nginx zu erhöhen, damit es funktioniert. Also meine Config-Datei wie folgt aussieht jetzt:

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

Danke für den Hinweis auf die Antwort Thomas55!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top