我在 Stack Overflow 上看到很多与这个主题相关的问题,尝试了尽可能多的方法,但仍然无法解决我的问题,所以我希望这篇文章可能会有所帮助。
我正在按照这个网站上的教程,在 Nginx 中使用 uWSGI 设置 Django:http://www.oliverelliott.org/article/computing/tut_setup_nginx_django/
uwsgi.ini 文件
[uwsgi]
chdir=/home/ec2-user/project/awssite
module=awssite.wsgi
home=/home/ec2-user/project
master=true
processes=2
socket=/home/ec2-user/project/awssite/awssite.socket
chmod-socket=666
vacuum=true
etc/nginx/sites-enabled/awssite_nginx.conf
upstream django {
server unix:///home/ec2-user/project/awssite/awssite.socket;
}
server {
listen 8080;
server_name localhost;
charset utf-8;
#max upload size
client_max_body_size 75M;
#Django media
location /media {
alias /home/ec2-user/project/awssite/awssite/media;
}
location /static {
alias /home/ec2-user/project/awssite/awssite/static;
}
location /favicon.ico {
log_not_found off;
}
location / {
uwsgi_pass django;
include /home/ec2-user/project/awssite/uwsgi_params;
}
}
这是在/var/log/nginx/error.log
中的错误代码。
2016/02/15 01:21:22 [crit] 22159#0: *3 connect() to unix:///home/ec2-user/project/awssite/awssite.socket failed (13: Permission denied) while connecting to upstream, client: CLIENT_IP, server: localhost, request: "GET /menu/ HTTP/1.1", upstream: "uwsgi://unix:///home/ec2-user/project/awssite/awssite.socket:", host: "HOST_IP:8080"
请注意:CLIENT_IP和HOST_IP是ip地址值。
这些是我尝试过但没有成功的方法: 1. 对主目录运行"chmod 755",然后运行"uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=666" 2. 将用户nginx添加到我的用户组中,然后运行"uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664" 3. 通过添加以下新行更改ini文件: chown-socket=ec2-user:nginx uid=nginx gid=nginx 然后运行"uwsgi --ini uwsgi.ini"。这会返回“chown权限被拒绝”,但当我使用"sudo"命令运行该命令时,我得到"sudo: uwsgi: command not found"(uWSGI已在系统范围内安装)。 4. 将所有文件放在不同的目录中(超出用户ec2-user),但这不允许我访问它们,除非我以root身份运行,即使这样也无法工作。 5. 运行"uwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664/666",带有参数"--uid nginx"、"--gid nginx"、"--chown-socket=nginx:nginx"。请注意:"664/666"表示我尝试了两种权限。 6. 重命名nginx.conf.default和nginx.conf.rpmnew文件(使nginx要读取的唯一conf文件为"nginx.conf")。
请问有人能够解决我的问题吗?我会在这个问题上继续添加我尝试过但没有成功的方法。谢谢 :)
编辑:感谢@GwynBleidD的答案,我终于让它工作了。 以下是有效的方法: 将套接字文件保留在"/tmp"中 etc/nginx/sites-enabled/awssite_nginx.conf
upstream django {
server unix:///tmp/djangosocket/awssite.socket;
}
....
uwsgi.ini 文件
[uwsgi]
chdir=/home/ec2-user/project/awssite
module=awssite.wsgi
home=/home/ec2-user/project
master=true
processes=2
socket=/tmp/djangosocket/awssite.socket
chmod-socket=666
vacuum=true
我将我的
ec2-user
(当前登录用户)加入到组 nginx
中。然后相应地更改了文件权限:
chown -R ec2-user:nginx djangosocket
chmod g+rwx djangosocket
chdir=/home/ec2-user/project
吗? - Selcukchdir
是项目中应用的路径,而不是项目本身的路径。 - carol Alexchdir
切换到项目目录并删除home参数,但是当uwsgi读取我的模块参数时会出现错误;我不认为这是我的问题的解决方案。你有其他我可以尝试的选项吗?@Selcuk - carol Alexawssite
。不好意思,我没有任何建议,因为你的配置看起来很正常。 - Selcuk