Obtenir “502 Bad Gateway” avec nginx, uwsgi python-flask sur Ubuntu 16.04

Je suis le suivant pour déployer une application de flask (simple hello world) sur Ubuntu 16-04. tutoriel numérique sur l’océan

Tout fonctionne bien jusqu’à tester uWSGI Serving . Après cela, j’ai suivi les étapes décrites et quand j’atteins enfin le bas et vérifie l’adresse IP du serveur, j’ai alors:

502 Bad Gateway 

OK bien. J’ai cherché et vérifié mon journal des erreurs, j’ai eu ceci: –

 2017/01/16 05:29:27 [crit] 20714#20714: *2 connect() to unix:/home/sajjan/project/project.sock failed (2: No such file or directory) while connecting to upstream, client: xx.9.xxx.xxx, server: 138.xxx.xx.xxx, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", host: "xx.xx.xx.xx" 

Donc, après avoir pris un journal des erreurs, j’ai créé le fichier project.sock manuellement. à nouveau Aller à l’adresse IP du serveur, puis même erreur “502 Bad Gateway”

Encore une fois vérifié le journal des erreurs et trouvé cette

 2017/01/16 06:07:11 [crit] 20874#20874: *1 connect() to unix:/home/sajjan/project/project.sock failed (13: Permission denied) while connecting to upstream, client: 47.9.237.113, server: XX.XX.XX.XX, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", host: " XX.XX.XX.XX " 

J’ai découvert le problème de l’autorisation et j’ai modifié la permission en utilisant la commande ci-dessous

 sudo chmod 666 project.sock 

Maintenant, j’ai vérifié la permission (en utilisant le nom de fichier ls -l)

 -rw-rw-rw- 1 root root 0 Jan 16 05:31 project.sock 

Maintenant, je retourne pour vérifier l’adresse IP du serveur, mais j’ai trouvé le même “502 Bad Gateway”. Encore une fois j’ai vérifié le journal des erreurs et trouvé ceci:

 017/01/16 06:13:31 [error] 20897#20897: *6 connect() to unix:/home/sajjan/project/project.sock failed (111: Connection refused) while connecting to upstream, client: 47.9.237.113, server: XX.XX.XX.XX, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/home/sajjan/project/project.sock:", host: " XX.XX.XX.XX ", referrer: "http:// XX.XX.XX.XX /" 

J’ai googlé pour l’erreur ci-dessus lire beaucoup au cours des deux derniers jours mais rien ne semblait fonctionner pour moi. J’ai vérifié ces réponses, mais aucune aide n’a été donnée à stackanswer-1 stackanswer-2 et avec celles-ci, j’ai vérifié tout le fil de la communauté digital-ocean, mais rien ne semble fonctionner.

Je suis un débutant total pour les serveurs et je ne sais pas grand chose sur Ubuntu. Si vous pouviez m’aider à découvrir ce que je faisais ou à suggérer de meilleurs tutoriels / méthodes pour déployer mon application de flask, je serais ravi.

Ce sont mes fichiers

  1. bonjour.py

     from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "

    Hello There!

    " if __name__ == "__main__": app.run(host='0.0.0.0')
  2. project.ini

     [uwsgi] module = wsgi:app master = true processes = 5 socket = /home/sajjan/project/project.sock chmod-socket = 660 vacuum = true die-on-term = true 
  3. wsgi.py

     from hello import app if __name__ == "__main__": app.run() 
  4. Voici le fichier: / etc / nginx / sites-available / project

     server { listen 80; server_name 138.197.28.107; location / { include uwsgi_params; uwsgi_pass unix:/home/sajjan/project/project.sock; } } 

Lorsque je lance la commande:

  sudo service uwsgi restart 

sortie:

  Failed to restart wsgi.service: Unit wsgi.service not found. 

tandis que la sortie de

  sudo service nginx status/restart 

alors cela montre que nginx est en cours d’exécution.

Aidez-moi, Si quelque chose que vous voulez savoir, faites-le moi savoir. Merci

MODIFIER :

J’ai créé un fichier project.service et son contenu est le suivant:

  [Unit] Description=uWSGI instance to serve project After=network.target [Service] User=sajjan Group=www-data WorkingDirectory=/home/sajjan/project Environment="PATH=/home/sajjan/project/venv/bin" ExecStart=/home/sajjan/project/venv/bin/uwsgi --ini project.ini [Install] WantedBy=multi-user.target 

J’ai compris que je devais courir sous la commande:

  sudo systemctl start project 

Le résultat est:

  Warning: project.service changed on disk. Run 'systemctl daemon-reload' to reload units. 

et quand je cours

  sudo systemcl reload project 

puis sortie:

  Failed to reload project.service: Job type reload is not applicable for unit project.service. See system logs and 'systemctl status project.service' for details. 

et quand je vérifie le “systemctl status project.service”

  ● project.service - uWSGI instance to serve project Loaded: loaded (/etc/systemd/system/project.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Mon 2017-01-16 17:49:29 UTC; 6min ago Main PID: 27157 (code=exited, status=203/EXEC) Jan 16 17:49:29 learningwithpython systemd[1]: Started uWSGI instance to serve project. Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Main process exited, code=exited, status=203/EXEC Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Unit entered failed state. Jan 16 17:49:29 learningwithpython systemd[1]: project.service: Failed with result 'exit-code'. 

J’ai eu le même problème en utilisant le guide. Autant que j’ai lu; 502 bad gateway est un symptôme de l’incapacité de Nginx à se connecter correctement à uwsgi. La modification des permissions sur le socket a résolu le problème pour moi.

 sudo chmod 777 /home/sajjan/project/project.sock sudo systemctl restart nginx 

777 est un peu excessif, mais c’est un moyen rapide et sale de vérifier s’il s’agit bien d’un problème avec les permissions

Nginx n’a pas l’autorisation d’écrire sur socket. L’octroi du mode approprié avec la commande ci-dessous m’a aidé.

 chmod 0755 /to/project 

J’ai vu votre commentaire sur https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

essayez d’exécuter sudo /etc/init.d/nginx start Essayez ensuite d’ouvrir http: // server_domain_or_IP

Si cela fonctionne, tapez which uwsgi pour trouver le bon chemin uwsgi et changez “/etc/systemd/system/myproject.service”

changement

Environment="PATH=/home/sammy/myproject/myprojectenv/bin" ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini dans le chemin réel au lieu du chemin env.

Je trouve ce problème à travers ces commandes.