Nginx   发布时间:2022-05-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nginx uWsgi Django’连接上游时权限被拒绝'(套接字)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经在SO上看到了很多关于这个主题的问题,我尝试了尽可能多的方法,但它仍然没有为我解决问题所以我希望这篇文章可能会有所帮助.@H_404_2@

我正在按照本网站的教程,在uWsgi:http://www.oliverelliott.org/article/compuTing/tut_setup_nginx_django/上使用Nginx设置Django@H_404_2@

uwsgi.ini文件@H_404_2@

@H_404_2@

[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

等/ Nginx的/启用的站点 – / awssite_Nginx.conf@H_404_2@

@H_404_2@

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中的错误代码@H_404_2@

@H_404_2@

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地址值.@H_404_2@

这些是我尝试过但没有奏效的:
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插座= EC2用户:Nginx的
UID = Nginx的
gid = Nginx然后运行uwsgi –ini uwsgi.ini这返回’权限被拒绝’但当我用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)
请问有人可以解释我如何解决这个问题?我将继续添加我尝试过的方法,而不是在我处理这个问题时没有解决这个问题.谢谢 :)@H_404_2@

编辑:感谢@GwynBlEIDD的回答,我终于得到了它的工作.
这是有效的:@H_404_2@

将我的套接字文件保存在/ tmp中
等/ Nginx的/启用的站点 – / awssite_Nginx.conf@H_404_2@

@H_404_2@

upstream django {
    server unix:///tmp/djangosocket/awssite.socket;
}
....

uwsgi.ini文件@H_404_2@

@H_404_2@

[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

最佳答案
如果您的Nginx服务器无法访问uWsgi套接字,请尝试执行以下步骤:@H_404_2@

>不要把你的socked放在系统中任何用户的主目录中,尤其是root!对于除该目录的所有者和root之外的任何人,某些unix操作系统默认访问主目录.将Nginx用户添加到该用户的私有组(对于大多数系统,每个用户都拥有自己的主组)可以提供帮助,但它几乎不会对root用户起作用.
>检查您的Nginx服务器(或您正在使用的任何其他http服务器)运行的用户和组.有时候是www-data,有时是Nginx,有时是其他东西.创建套接字时,请确保用户名将匹配运行uWsgi服务器的用户名和uWsgi运行时的组名匹配组(或者您可以交换它).
>检查您的套接字权限是否至少为660.没有必要为任何人授予权限,所以不要这样做.
>检查您的Nginx和uWsgi是否都有权访问放置套接字的目录以及所有父目录.@H_404_2@

套接字文件的好地方是/ var / run目录(对于某些系统,它是/ run或两者).它通常作为ramdisk(tmpfs)安装,并且对于系统中的任何人都是可写的,因此每个用户都可以在这里创建套接字(并访问它们).如果由于某种原因在您的系统中无法访问,您也可以尝试/ tmp目录.@H_404_2@

如果您还要从主目录中直接从Nginx提供静态文件,请虑将Nginx添加到您的个人组,这样它就可以对您的主目录和静态文件具有读取权限.@H_404_2@

大佬总结

以上是大佬教程为你收集整理的Nginx uWsgi Django’连接上游时权限被拒绝'(套接字)全部内容,希望文章能够帮你解决Nginx uWsgi Django’连接上游时权限被拒绝'(套接字)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: