在ubuntu 16.04上使用nginx获取“502 Bad Gateway”,uwsgi python-flask

vm0i2vca  于 2023-08-03  发布在  Nginx
关注(0)|答案(7)|浏览(214)

我按照这个在Ubuntu 16-04上部署了一个 flask应用程序(简单的hello world)digital Ocean tutorial
测试uWSGI Serving之前,一切正常。之后,我按照所描述的步骤,当我终于到达底部并检查服务器IP地址时,我得到:

502 Bad Gateway

字符串
好吧,我搜索并检查了我的错误日志,我得到了这个:-

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"


因此,在获取错误日志后,我手动创建了文件project.sock。再次转到服务器ip地址,然后出现同样的错误**“502 Bad Gateway”**
再次检查了错误日志,发现

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 "


我弄清楚了权限问题,并使用下面的命令更改权限

sudo chmod 666 project.sock


现在我检查了权限(使用ls -l文件名)

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


现在我回去检查服务器的IP,但发现相同的“502 Bad Gateway”。我再次检查错误日志,发现:

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 /"


我在谷歌上搜索了上述错误,在过去的两天里读了很多,但似乎没有什么对我有效。我已经检查了这些答案,但没有帮助stackanswer-1stackanswer-2和这些沿着,我检查了所有的数字海洋社区线程,但**似乎没有工作。
我是一个服务器新手,对ubuntu了解不多。如果你能帮助我找出我做错了什么,或者建议一些更好的教程/方法来部署我的flask应用程序,那么我将非常感激。
这些是我的文件

  1. hello.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

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

  1. 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

  1. wsgi.py
from hello import app

if __name__ == "__main__":
      app.run()


1.下面是文件:/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;
    }
}


当我运行命令时:

sudo service uwsgi restart


产出:

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


while输出

sudo service nginx status/restart


那么这表明nginx正在运行。
帮帮我,如果你还想知道什么,就告诉我。谢啦,谢啦

编辑:

我创建了一个project.service文件,其内容是:

[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


我发现我必须运行下面的命令:

sudo systemctl start project


输出为:

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


当我跑步的时候

sudo systemcl reload project


然后输出:

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.


当我检查“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'.

ghg1uchk

ghg1uchk1#

我在使用指南时也遇到了同样的问题。据我所知502 bad gateway是Nginx无法正确连接到uwsgi的症状。更改套接字的权限为我解决了这个问题。

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

字符串
777当然有点过分,但它是一种快速而肮脏的方法来验证它是否确实是权限问题

9nvpjoqh

9nvpjoqh2#

Nginx没有写socket的权限。下面命令授予适当的模式,帮助我。

chmod 0755 /to/project

字符串

dbf7pr2w

dbf7pr2w3#

同样的问题。
但我给予了666许可,并重新启动所有,它的工作。
我认为错误日志只显示了问题的一个可能原因。而journalctl -u <yourproject>.service命令有助于说明另一个原因。
我的错误日志还告诉我他找不到“myproject.socket”。但是.ini已经帮助我们构建了它。然后我得到这个错误:myproject.service:生成~/bin/uwsgi的USER步骤失败:无此过程
也许这是许可的问题。

5gfr0r5j

5gfr0r5j4#

尝试运行myapp/bin/uwsgi --ini myapp.ini来查看阻止uwsgi运行的实际错误。
在我的例子中,.ini配置文件中的5个进程对于我的cpu来说太多了,这是我的错误输出。
your processes number limit is 3900 your memory page size is 4096 bytes detected max file descriptor number: 1024
如果是这种情况,将.ini文件中的进程数减少到2可能会起作用。

wmvff8tz

wmvff8tz5#

对我来说,这个问题是由于用户的配置。基本上,我使用root用户设置所有项目。但后来我使用具有sudo权限的非root用户从头开始重做了所有内容。成功了。

xj3cbfub

xj3cbfub6#

我在https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04上看到了你的评论
尝试运行sudo /etc/init.d/nginx start然后尝试打开http://server_domain_or_IP
如果可以,输入which uwsgi找到正确的uwsgi路径,并更改“/etc/systemd/system/myproject.service”。
变化
Environment="PATH=/home/sammy/myproject/myprojectenv/bin" ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini到真实的路径而不是env路径。
我通过这些命令解决了这个问题。

mkshixfv

mkshixfv7#

正如许多人已经提到的,502错误是关于套接字权限的(您可能会在/var/log/nginx/error.log中看到Permission denied错误)。然而,这一切似乎都必须工作,因为
1.套接字的文件所有权为your_user:www-data

  1. socket的文件权限是660(这意味着您和组可以读/写socket)
  2. nginx与用户www-data:www-data一起工作(它在nginx .conf文件中配置)
    真实的的问题是nginx无法连接到您主目录下的socket
    所以解决方案很简单--只需要将套接字文件移到其他地方。例如,/tmp//var/www/...文件夹。

解决方案:

创建目录

sudo mkdir /var/www/your_project
sudo chown your_user:www-data /var/www/your_project

字符串
修改your_project.ini

socket = /var/www/your_project/your_project.sock


修改nginx服务器块

uwsgi_pass unix:///var/www/your_project/your_project.sock;


重启uWSGI和nginx

sudo systemctl restart your_project_service
sudo systemctl restart nginx


现在一切都必须工作。

相关问题