使用gunicorn& amp;设置django站点nginx的
项目的gunicorn设置:
[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"
答案 0 :(得分:2)
我有一个centos 7操作系统,无论如何我解决了安装问题:
sudo yum install policycoreutils-python
sudo semanage permissive -a httpd_t
答案 1 :(得分:0)
为了补充答案,基于CentOS / RHEL的Linux操作系统具有 默认 的SELinux(安全增强型Linux )。
SELinux可以处于启用或禁用状态。禁用时 仅使用DAC规则。启用后,SELinux可以在其中一个中运行 以下模式:
- 强制执行:强制执行SELinux政策。 SELinux基于SELinux策略规则拒绝访问。这是默认。在强制执行模式下,如果某些内容违反了已定义的策略,则该操作将被阻止并记录。 因此,您面临的权限被拒绝
- 许可:未强制执行SELinux政策。 SELinux不拒绝访问,但会记录拒绝操作 如果以强制模式运行,则被拒绝。
注意:以下操作将在 root
时执行选项1 :
setenforce 1
进入强制执行模式。 [默认强> setenforce 0
进入许可模式选项2 : 使用utils创建策略,例如 policycoreutils-python
policycoreutils-python提供semanage等实用程序, audit2allow,audit2why和chcat,用于操作和管理SELinux。
编辑:
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 policy_name.mod /path/to/your/policy/policy_name.te
一旦我们从policy_name.te配置创建了模块policy_name.mod,运行以下命令来创建已编译的SE模块
semodule_package -m policy_name.mod -o policy_name.pp
最后,使用以下命令安装编译SE Module policy_name.pp:
semodule -i policy_name.pp