J'ai Nginx comme serveur web frontal écoute sur le port 80. Et certaines demandes, j'ai configuré nginx pour inverser le proxy à un serveur web basé mochiweb que j'ai écrit , écoute sur le port 8000. Ma configuration nginx pour cela ressemble à ceci:Nginx Reverse Proxy à l'application Mochiweb personnalisée
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;
}
maintenant, quand j'accéder à l'URL http://localhost/mymochiserver Je ne vois pas de réponse du navigateur. Le navigateur dit simplement "Waiting for localhost". mymochiserver imprime une trace à la fenêtre de terminal à partir de laquelle il est exécuté, chaque fois qu'un utilisateur s'y connecte, et maintenant, je vois la trace pour chaque fenêtre de navigateur que j'ouvre pour connecter cette URL. Mais je ne vois aucune des sorties que je m'attends à voir écrites dans le navigateur. MAIS, quand j'accède directement à l'URL http://127.0.0.1:8000/ tout fonctionne bien, et je vois la sortie de mymochiserver sur le navigateur. Donc ça marche quand on l'appelle directement. Mais lorsqu'il est inversé via nginx, il ne semble pas fonctionner. Une idée de ce qui pourrait être faux?
Mise à jour: Dans mon application Mochiweb je ces lignes de code:
Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
proc_lib:hibernate(?MODULE, feed, [Response, Userid, 1]);
Il est essentiellement une application COMET où les utilisateurs se connectent au mymochiserver et le serveur expulse des données à tous les clients connectés. S'il n'y a aucune donnée à envoyer du serveur, j'hiberne le processus. Et puis quand réveillé, j'appelle la fonction d'alimentation pour envoyer les données. Et si je supprime le code d'hibernation, tout fonctionne bien, et je vois la sortie dans le navigateur. Mais si je fais hiberner, ça ne marche pas. Une idée de ce qui ne va pas?