使用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