2017-09-10 4 views
0

J'ai un problème douloureux. J'utilise Flask-SocketIO pour mettre à jour les quelques états du processus d'arrière-plan sur la page Web. Pour mon exemple, mon application est mise dans la machine A avec IP 170.8.8.8 surveillant le port 5000, et je mets nginx dans la machine B avec IP 170.8.8.9 surveillant également le port 5000. Donc je veux visiter IP: 5000 dans B qui saute IP: 5000 en A. ci-dessous est ma config nginx dans la machine B:page Web seulement peut obtenir le dernier état du processus d'arrière-plan en actualisant la page Web

upstream cuitccol.com{ #the name of server cluster 
     server 170.8.8.8:5000 max_fails=5 fail_timeout=50s; #for the first web server 
     } 

    server { 
     listen  5000; 
     server_name localhost; 

     #charset koi8-r; 

     #access_log logs/host.access.log main; 

     location/{ 
      proxy_pass http://cuitccol.com; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_set_header Host $host; 
     } 

Si je visite directement IP en A, la page web de mon navigateur peut constamment mises à jour l'état du processus d'arrière-plan. mais si je visite B où nginx est mis, la page Web ne peut pas constamment mettre à jour l'état, et je dois actualiser la page Web pour obtenir l'état suivant. et la console de mon navigateur a une erreur comme ci-dessous:

WebSocket connection to 'ws://170.8.8.9:5000/socket.io/?EIO=3&transport=websocket&sid=4a2ec29f7f834a0bb289b21f03c3e47c' failed: Error during WebSocket handshake: Unexpected response code: 200 

Je ne sais pas où se passe mal. nginx ou flask-socketio. Pouvez-vous donner quelques conseils? merci beaucoup ~

+0

Voir la documentation sur la configuration de nginx pour Flask-SocketIO: https://flask-socketio.readthedocs.io/en/latest/#using-nginx-as -a-websocket-reverse-proxy – Miguel

+0

Ok, la documentation que vous spécifiez peut également résoudre mon problème. Merci beaucoup – AndrewGong

Répondre

0

changer votre config ci-dessous

location/{ 
     proxy_pass http://cuitccol.com; 
     proxy_http_version 1.1; 
    } 

    location /socket.io { 
     proxy_pass http://cuitccol.com/socket.io; 
     proxy_http_version 1.1; 
     proxy_buffering off; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 

Et voir si ça aide. Les en-têtes de mise à niveau doivent être utilisés pour Socket et non pour le reste des points d'extrémité

+0

vous êtes tellement cool, votre solution résout complètement mon problème. merci beaucoup ~~ – AndrewGong