Gunicorn Nginx在连接到上游时被拒绝



使用Gunicorn&nginx

项目的枪支设置:

[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=username
Group=nginx
WorkingDirectory=/home/username/my_project
ExecStart=/home/username/my_project/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/username/my_project/my_project.sock my_project.wsgi:application
[Install]
WantedBy=multi-user.target

nginx配置文件:

user nginx;
server {
    listen       80;
        server_name  192.168.66.106;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location = /favicon.ico { access_log off; log_not_found off; }
        location /static {
            alias /home/username/my_project;
        }
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://unix:/home/username/my_project/my_project.sock;
       }
    }

我得到了我的项目的许可

drwxrwxr-x. 5 username nginx 4.0K Apr  4 10:20 modulo1
-rwxrwxr-x. 1 username nginx  823 Apr  4 10:13 manage.py
drwxrwxr-x. 4 username nginx 4.0K Apr  4 10:20 modulo2
drwxrwxr-x. 2 username nginx  249 Apr  4 10:29 my_project
srwxrwxrwx. 1 username nginx    0 Apr  4 10:47 my_project.sock
-rw-rw-r--. 1 username nginx  565 Apr  4 10:13 README.md
-rw-rw-r--. 1 username nginx  228 Apr  4 10:14 requirements.txt
drwxrwxr-x. 5 username nginx   38 Apr  4 10:13 static
drwxrwxr-x. 3 username nginx   88 Apr  4 10:14 templates

这是来自/var/log/nginx/error.log

的日志错误
2018/04/04 10:54:03 [crit] 14238#0: *4 connect() to unix:/home/username/my_project/my_project.sock failed (13: Permission denied) while connecting to upstream client: 192.168.66.50, server: 192.168.66.106, request: "GET / HTTP/1.1", upstream: "http://unix:/home/username/my_project/my_project.sock:/", host: "192.168.66.106"

我有一个Centos 7 OS,无论如何我解决了安装问题:

sudo yum install policycoreutils-python 
sudo semanage permissive -a httpd_t 

要添加答案的顶部,基于CentOS/RHEL的Linux操作系统具有SELINUX( Security Enhanced Linux (,em>

selinux可以处于启用或禁用状态。禁用时, 仅使用DAC规则。启用后,Selinux可以在其中一个 以下模式:

  • 执行:执行SELINUX策略。Selinux拒绝基于SELINUX策略规则访问。这是默认。在执行模式下,如果某件事违反了定义的策略,则该操作将被阻止和记录。因此,您面临的权限拒绝了
  • 允许的:未执行SELINUX策略。Selinux不会否认访问权限,但拒绝以获取的操作记录 如果在执行模式下运行。

注意:下面的操作将在 root

时执行

选项1

  • 使用 getenforce 实用程序查看当前的Selinux模式
  • 使用 setenForce 实用程序在执行模式和允许模式之间进行更改。
    • 使用setenforce 1进入执行模式。[默认]
    • 使用setenforce 0进入宽松模式

选项2 :使用utils创建一个策略

策略coreutils-python提供的实用程序,例如emanage, audit2allow,audit2why和chcat,用于操作和管理selinux。

编辑

  • 通常以下特定于策略(我使用UWSGI插座(:

policy_name.te

module <NAME_OF_THE_POLICY> 1.0;
require {
    type var_run_t;
    type httpd_t;
    type initrc_t;
    class sock_file write;
    class unix_stream_socket connectto;
}
#============= httpd_t ==============
allow httpd_t initrc_t:unix_stream_socket connectto;
#!!!! This avc is allowed in the current policy
allow httpd_t var_run_t:sock_file write;

然后从TE创建PP模块:

checkModule -m -M -O polition_name.mod/path/to/your/policy/policy_name.te

一旦我们拥有从polition_name.te配置创建的模块policy_name.mod,请运行以下命令来创建编译SE模块

semodule_package -m polition_name.mod -o polition_name.pp

最后,使用以下命令安装Compiles SE Module Policy_name.pp:

semodule -i policy_name.pp

最新更新