Nginx 无法看到 unix 套接字

Nginx 无法看到 unix 套接字

更新:我看到了与 /tmp 目录相关的问题,并且有一条评论提到将套接字移出 /home。但这并没有解决问题。

(文章底部有其他更新)

我有一个Ubuntu 16.04 虚拟机在 Azure 上我用来托管烧瓶应用程序使用uwsgi作为服务器和nginx作为反向代理,按照本指南...

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

问题是我得到了一个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.log8份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.iningnix所以 的进程不知道该套接字myapp.socket是什么 。因此,避免此问题的技巧是。

  1. 停止 ngnix 使用sudo service ngnix stop
  2. 启动应用uwsgi myapp.ini
  3. 启动 ngnixsudo service ngnix start

相关内容