Nginx Reverse Proxy, um benutzerdefinierte Mochiweb Anwendung
-
06-07-2019 - |
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?
Lösung
Fixed!
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!