我正在学习将我的Flask应用程序部署到Ubuntu AWS EC2实例上并遵循Digital Ocean tutorial。我正在遇到最后一个问题:我启动了我的Gunicorn并使用此命令工作:gunicorn --workers 3 --bind unix:project.sock -m 007 wsgi:app
创建3个工作线程和一个名为project.sock
的套接字。
[2018-02-23 17:14:49 +0000] [INFO] Booting worker with pid: X
[2018-02-23 17:14:49 +0000] [INFO] Booting worker with pid: X
[2018-02-23 17:14:49 +0000] [INFO] Booting worker with pid: X
Connection initialized.
Connection initialized.
Connection initialized.
但是当我试图让Nginx从Gunicorn-project.sock
连接到我的502 Bad Gateway error
时,我遇到了错误。
这是我的/etc/nginx/sites-available/project
配置:
server {
listen 80;
server_name MY_SERVER_DNS;
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/flaskapp_dev/my_project/project.sock;
}
}
检查Nginx错误日志表明,尝试连接Permission denied
时出现project.sock
错误:
2018/02/23 17:26:46 [crit] 10822#10822: *4 connect() to unix:/home/ubuntu/myproject/myproject/myproject.sock failed
(13: Permission denied) while connecting to upstream,
client: CLIENT_IP, server: MY_SERVER_DNS,
request: "GET / HTTP/1.1",
upstream: "http://unix:/home/ubuntu/myproject/myproject/project.sock:/", host: "MY_SERVER_DNS"
我知道在这个问题上有很多SO帖子,但我注意到他们中的大多数都围绕uwsgi
,我在这里没有使用。我怀疑它显然是一个权限问题,所以我尝试了chmod 711 /home/ubuntu/myproject/project
并重新启动了nginx,但结果却是502 Bad Gateway error
。
closest SO post to my issue appears to be this one,但没有答案或评论。
答案 0 :(得分:1)
这只是一个权限问题。在一个用户下运行的Nginx无法访问另一个用户拥有的unix套接字。我建议在同一个用户下运行nginx服务器和gunicorn,因此nginx将访问由gunicron创建的unix socket,没有任何问题。 chmod 777
是一个时间解决方案,可以显示只有权限问题,如果在执行此命令后,所描述的问题已经消失,但最好在同一用户下运行nginx和gunicorn。另外最好指定unix socket的完整路径以避免“没有这样的文件或目录”可能的问题:gunicorn --workers 3 --bind <full_path_to_unix_socket_to_be_created>