2016-10-08 146 views
1

为了切换到Nginx,我遇到了配置问题,并得到了502网关错误。下面是错误日志上的连接:使用FlaskApp配置uWSGI

此命令将一切工作正常,如果运行:

tail -f error.log 
2016/10/08 16:09:31 [crit] 21682#21682: *29 connect() to unix:/var/www/FlaskApp/FlaskApp/runserver.sock failed (13: Permission denied) while connecting to upstream, client: 73.188.249.47, server: ceejcalvert.com, request: "GET/HTTP/1.1", upstream: "uwsgi://unix:/var/www/FlaskApp/FlaskApp/runserver.sock:", host: "website.com" 

如果我在服务器上的终端是我可以通过手动指挥插座获取网站上去:

uwsgi -s /var/www/FlaskApp/FlaskApp/runserver.sock -w runserver:app --chmod-socket=666 

问题是我不能让它在守护进程模式下工作。我的配置如下:

$ cat /etc/systemd/system/runserver.service 

[Unit] 
Description=uWSGI instance to serve runserver 
After=network.target 

[Service] 
User=username 
Group=www-data 
WorkingDirectory=/var/www/FlaskApp/FlaskApp 
Environment="PATH=/var/www/FlaskApp/FlaskApp/venv/bin" 
ExecStart=/var/www/FlaskApp/FlaskApp/venv/bin/runserver.sock --ini runserver.ini 

[Install] 
WantedBy=multi-user.target 

...

cat /var/www/FlaskApp/FlaskApp/runserver.ini 

[uwsgi] 
module = wsgi:app 

master = true 
processes = 5 

logto = /home/jmc856/error.log 

socket = runserver.sock 
chmod-socket = 666 
vacuum = true 

die-on-term = true 

假设站点提供链接到网站启用,

cat /etc/nginx/sites-available/runserver 

server { 
    listen 80; 
    server_name website.com; 

location/{ 
    include uwsgi_params; 
    uwsgi_pass unix:/var/www/FlaskApp/FlaskApp/runserver.sock; 
    } 
} 

任何明显我失踪?

当我运行下面,我得到退出代码3.

sudo systemctl status runserver 

runserver.service - uWSGI instance to serve runserver 
Loaded: loaded (/etc/systemd/system/runserver.service; enabled; vendor preset: enabled) 
Active: failed (Result: exit-code) since Sat 2016-10-08 16:08:45 EDT; 20min ago 
Main PID: 22365 (code=exited, status=203/EXEC) 

Oct 08 16:08:45 FirstNameLastName.com systemd[1]: Stopped uWSGI instance to serve runserver. 
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: Started uWSGI instance to serve runserver. 
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Main process exited, code=exited, status=203/EXEC 
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Unit entered failed state. 
Oct 08 16:08:45 FirstNameLastName.com systemd[1]: runserver.service: Failed with result 'exit-code'. 
+0

您是否试过在systemd下运行uWSGI服务的[Emperor](https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html)方法? –

回答

1

解决了我的问题,这个码头工人的形象。大部分我的配置都很好。这是一个清单,以确保您收到502网关错误。

1)我首先添加了所有绝对路径到配置文件。例如我改变systemd配置于:

$ cat /etc/systemd/system/runserver.service 

[Unit] 
Description=uWSGI instance to serve runserver 
After=network.target 

[Service] 
User=username 
Group=www-data 
WorkingDirectory=/var/www/FlaskApp/FlaskApp 
Environment="PATH=/var/www/FlaskApp/FlaskApp/venv/bin" 
ExecStart=/var/www/FlaskApp/FlaskApp/venv/bin/runserver.sock --ini /var/www/FlaskApp/FlaskApp/runserver.ini 

[安装] WantedBy = multi-user.target

2)更改.ini文件直接调用uWSGI应用程式:

cat /var/www/FlaskApp/FlaskApp/runserver.ini 

[uwsgi] 
chdir=/var/Webpage/ 
wsgi-file = wsgi.py 
callable = app 

master = true 
processes = 5 

logto = /home/error.log 

socket = runserver.sock 
chmod-socket = 666 
vacuum = true 

die-on-term = true 

3)确保FlaskApp主机为0.0.0.0:

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

4)使用这些命令尝试查找走出失败的地方。

确保CONFIGS有正确的语法

$ sudo nginx -t 

确保nginx的守护进程运行正常

$ systemctl status nginx.service 

确保uWSGI实例来满足{}的应用程序正在运行。

$ systemctl 

如果一切是好的,仍然发现错误,搜索失败

$ sudo journalctl 

而且

$ sudo tail -f /var/log/nginx/error.log 

如果一切运行正常,请务必执行以下操作:

$ sudo systemctl restart {app} 
$ sudo start {app} 
$ sudo enable {app} 

那个la st命令是我忘记的,并且阻止我实现我的配置很长一段时间。在我的情况{app}是'runserver'