【发布时间】:2016-05-25 20:00:12
【问题描述】:
我已经看到很多关于这个主题的问题,并且我已经尝试了尽可能多的方法,但它仍然不能解决我的问题,所以我希望这篇文章可能会有所帮助。
我正在按照本网站的教程使用 uWSGI 在 Nginx 上设置 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 这将返回 'Permission denied for 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 djangosocketchmod g+rwx djangosocket
【问题讨论】:
-
您可以尝试将您的 chdir 更改为
chdir=/home/ec2-user/project吗? -
@Selcuk 不,那没用。据我了解,
chdir是项目中应用程序的路径,而不是项目本身。 -
我总是 chdir 到项目目录,但我不包括 home 参数。
-
我明白了,我在项目目录中尝试了
chdir并删除了 home 参数,但是当 uwsgi 读取我的module参数时,这给了我错误;不要认为这可以解决我的问题。您还有其他我可以尝试的选择吗? @塞尔丘克 -
抱歉,刚刚发现您的项目名称是
awssite。不,我没有任何建议,因为您的配置对我来说似乎没问题。
标签: django sockets nginx uwsgi