我正在学习关于how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04的本教程
当我试图连接时,Nginx给出了以下错误:
2019/05/10 17:21:03 [crit] 922#922: *22 connect() to
unix:/var/www/patria/flask/pirata.sock failed (13: Permission denied)
while connecting to upstream, client: my_ip_address, server:
digital_ocean_ip, request: "GET / HTTP/1.1", upstream:
"http://unix:/var/www/patria/flask/pirata.sock:/", host: "digital_ocean_ip"注意:在套接字的路径中没有输入错误。
以下是套接字权限:
root@ageispolis:/var/www/patria/flask# ll pirata.sock
srwxrwxr-- 1 slash3b www-data 0 May 10 16:43 pirata.sock=奔跑的火鸟:
root@ageispolis:/var/www/patria/flask# ps -aux|grep gunicorn
slash3b 863 0.0 2.2 60000 22304 ? Ss 16:43 0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b 1036 0.0 2.7 99884 28024 ? S 16:43 0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b 1040 0.0 2.7 99884 28024 ? S 16:43 0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b 1041 0.0 2.7 99904 28024 ? S 16:43 0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
root 3008 0.0 0.1 13136 1056 pts/1 S+ 17:39 0:00 grep --color=auto gunicorn以下是systemd服务文件:
root@ageispolis:/var/www/patria/flask# cat /etc/systemd/system/pirata.service
[Unit]
Description=Gunicors instance to serve pirata.com
After=network.target
[Service]
User=slash3b
Group=www-data
WorkingDirectory=/var/www/patria/flask
Environment="PATH=/var/www/patria/pirata/bin"
ExecStart=/var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
[Install]
WantedBy=multi-user.targetNginx conf文件:
root@ageispolis:/var/www/patria/flask# cat /etc/nginx/sites-enabled/pirata
server {
listen 80;
server_name digital_ocean_ip;
location / {
include proxy_params;
proxy_pass http://unix:/var/www/patria/flask/pirata.sock;
}
}运行nginx:
root@ageispolis:/var/www/patria/flask# ps -aux|grep nginx
root 921 0.0 0.1 140628 1504 ? Ss 16:43 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 922 0.0 0.6 143300 6164 ? S 16:43 0:00 nginx: worker process
root 3116 0.0 0.0 13136 1008 pts/1 S+ 17:46 0:00 grep --color=auto nginx因此,据说nginx工作者(www-data)可以访问套接字,但看起来却没有?
当我将套接字权限设置为777时,它将无法工作。
我不明白发生了什么事。至少最好以某种方式调试这个unix套接字。我似乎能够用nc -U /path_to_socket和socat连接到它,但是我不明白如何调试它并发送请求。
请帮帮我!
更新:我找到了一个卷曲套接字的方法!
root@ageispolis:/var/www/patria/flask# curl -H --unix-socket pirata.sock http
curl: (6) Could not resolve host: pirata.sock
curl: (6) Could not resolve host: http
root@ageispolis:/var/www/patria/flask# curl -v --unix-socket pirata.sock http
* Rebuilt URL to: http/
* Trying pirata.sock...
* Connected to http (pirata.sock) port 80 (#0)
> GET / HTTP/1.1
> Host: http
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: gunicorn/19.9.0
< Date: Fri, 10 May 2019 19:03:17 GMT
< Connection: close
< Content-Type: text/html; charset=utf-8
< Content-Length: 17326
<
<!doctype html>
<html lang="en">
<head>
...无论哪种方式,nginx仍因错误而失败。
发布于 2019-05-12 07:37:04
非常感谢金属的暗示!
因此,我与之斗争的最终权限是drwxrw-r-- 5 slash3b www-data,但它没有起作用。然后我做了su - www-data -s /bin/bash,成为了www数据用户,我试图在套接字目录中列出文件,这给了我权限错误。
因此,解决方案是给予www-数据用户使用套接字文件执行文件夹的权限。我没有意识到执行位一定是这样的,这是多么愚蠢的错误:)
https://stackoverflow.com/questions/56082994
复制相似问题