web-dev-qa-db-fra.com

Obtenir "502 Bad Gateway" avec nginx, uwsgi python-flask sous Ubuntu 16.04

Je suis cela pour déployer une application de flacon (monde simple, bonjour)} sur Ubuntu 16-04. Didacticiel Digital Ocean

Tout fonctionne bien jusqu'à Test uWSGI Serving . Après cela, j’ai suivi l’étape décrite et quand j’ai enfin atteint le fond et vérifié l’adresse IP du serveur, j’ai eu:

502 Bad Gateway

OK bien. J'ai cherché et vérifié mon journal d'erreur, 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 Allez à l'adresse IP du serveur, puis à la même erreur "502 passerelle incorrecte"

A nouveau vérifié le journal des erreurs et trouvé ceci

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 compris le problème de l'autorisation et changer l'autorisation à l'aide de la commande ci-dessous

Sudo chmod 666 project.sock

Maintenant, j'ai vérifié la permision (en utilisant ls -l nom de fichier)

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

Maintenant, je reviens 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 j'ai 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 lu beaucoup au cours des deux derniers jours, mais rien ne semble fonctionner pour moi. J'ai vérifié ces réponses mais aucune aide stackanswer-1stackanswer-2 et avec ces mots, j'ai vérifié tout le fil de la communauté numérique-océan mais rien ne semble fonctionner.

Je suis totalement débutant sur les serveurs et je ne connais pas grand chose à Ubuntu. Si vous pouvez m'aider à découvrir ce qui ne va pas ou suggérer un meilleur tutoriel/des moyens de déployer mon application de flacon, je vous en serais reconnaissant.

Ce sont mes fichiers

  1. bonjour.py

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'>Hello There!</h1>"
    
    if __== "__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 __== "__main__":
          app.run()
    
  4. Le fichier ci-dessous est:/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;
        }
    }
    

Quand je lance la commande:

    Sudo service uwsgi restart

sortie:

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

tout en sortie de

   Sudo service nginx status/restart

puis cela montre que nginx est en cours d'exécution.

Aidez-moi, si quelque chose d'autre que vous voulez savoir, faites le moi savoir. Merci

EDIT:

J'ai créé un fichier project.service et son contenu est:

    [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 en-dessous de la commande:

    Sudo systemctl start project

La sortie 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'.
7
Sajjjan Kumar

J'ai eu le même problème en utilisant le guide. Pour autant que j'ai lu; 502 mauvaise passerelle est un symptôme de l’impossibilité pour Nginx de se connecter correctement à l’uwsgi. Changer les autorisations 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 d’autorisations.

2
Leafbreaker

Nginx n'a pas la permission d'écrire dans le socket. L'attribution du mode approprié avec la commande ci-dessous m'a aidé.

chmod 0755 /to/project
1
surge_

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 Puis essayez d’ouvrir http: // serveur_domaine_ou_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 résout ce problème à travers ces commandes.

0
Harper Koo