更新:我看到了与 /tmp 目录相关的问题,并且有一条评论提到将套接字移出 /home。但这并没有解决问题。
(文章底部有其他更新)
我有一个Ubuntu 16.04 虚拟机在 Azure 上我用来托管烧瓶应用程序使用uwsgi作为服务器和nginx作为反向代理,按照本指南...
问题是我得到了一个502错误的网关当我尝试使用 Web 浏览器通过端口 80 连接到服务器的 IP 时,我检查日志发现 nginx 找不到我在配置文件中指定的 unix 套接字。
错误是...
2016/08/29 23:23:20 [crit] 2792#2792: *120 connect() to unix:///home/me/appname/appname/appname.sock failed (2: No such file or directory) while connecting to upstream, client: ip.goes.in.here, server: here.goes.the.ip, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:///home/me/appname/appname/appname.sock:", host: "the.ip.goes.here", referrer: "http://all.of.teh.ips/"
我的服务器块看起来像这样...
server {
listen 80;
server_name ip.address.goes.here;
location / {
include uwsgi_params;
uwsgi_pass unix:/etc/appname.sock;
}
}
我的应用程序配置文件文件看起来像这样......
[uwsgi]
module:wsgi:app
master = true
processes = 5
socket = /etc/appname.sock
chmod-socket = 660
vacuum = true
die-on-term = true
我的。服务文件看起来像这样......
[Unit]
Description=UWSGI instance to serve app
After=network.target
[Service]
User=me
Group=www-data
WorkingDirectory=/home/me/appname
ExecStart=/home/me/appnam/uwsgi --ini appname.ini
[Install]
WantedBy=multi-user.target
我也有安装脚本执行以下操作(可能会导致重复日志的问题?)
sudo ufw allow 'Nginx Full'
export FLASK_APP=appname.py
export APPNAME_SETTINGS=app_settings.cfg
sudo cp service/appname.service /etc/systemd/system/appname.service
sudo cp nginxServerBlock/appname /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/appname /etc/nginx/sites-enabled
sudo nginx -t #this tests for syntax errors
sudo systemctl start appname
sudo systemctl enable appname
我改变了 unix 后面的斜线数和回家之前(现在等等,目录已经改变),以及我看到的许多其他东西,在不同的指南中是不同的。
我尝试移动插座通过更改 .ini 文件和服务器块中指定的位置,但错误完全没有改变,所以 nginx 似乎正在寻找同一目录。
nginx 正在搜索以查找套接字的目录不在我的配置中的任何地方。
[更新]我发现有重复的日志在 var/log/nginx 目录中,8份access.log和8份error.log每次更改后我都会运行安装脚本(在使用 git 提取更改后将文件移动到适当的位置),并按照运行安装脚本后出现在终端中的说明使用守护进程重新加载(我不记得确切的名称)...我的脚本中的某些内容是否会导致重复?我是否可能不小心对不同的服务进行了一些奇怪的重复设置,每个设置都使用不同的日志文件对?
答案1
User=me
Group=www-data
WorkingDirectory=/home/me/appname
ExecStart=/home/me/appnam/uwsgi --ini appname.ini
这看起来像是一个拼写错误 (appnam)。
你确定服务器正在运行吗?你能用 socat 连接吗?
答案2
如何修改为
uwsgi_pass unix:/home/me/appname/appname/appname.sock;
答案3
ngnix 作为一个单独的进程运行,因此在启动应用程序之前您需要停止 ngnix。
sudo service ngnix stop
。否则套接字myapp.socket
对 ngnix 是不可见的。即使您确实在命令的ls /var/www/myapp/myapp.socket
终端结果中显示了ls
。因为ngnix
在您使用命令运行应用程序之前已启动uwsgi myapp.ini
,ngnix
所以 的进程不知道该套接字myapp.socket
是什么 。因此,避免此问题的技巧是。
- 停止 ngnix 使用
sudo service ngnix stop
- 启动应用
uwsgi myapp.ini
- 启动 ngnix
sudo service ngnix start