Nginx:CentOS 7上的Gunicorn套接字被拒绝

时间:2018-02-15 03:56:17

标签: django nginx centos7 gunicorn

我正在进行Django项目部署。我在提供ma EC2(AWS)的CentOS 7服务器上工作。我试图通过多种方式解决这个问题,但我无法理解我错过了什么。

我正在使用ningx和gunicorn来部署我的项目。我创建了/etc/systemd/system/myproject.service文件,其中包含以下内容:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=centos
Group=nginx
WorkingDirectory=/home/centos/myproject_app
ExecStart=/home/centos/myproject_app/django_env/bin/gunicorn --workers 3 --bind unix:/home/centos/myproject_app/django.sock app.wsgi:application
[Install]
WantedBy=multi-user.target

当我运行sudo systemctl restart myproject.servicesudo systemctl enable myproject.service时,django.sock文件已正确生成/home/centos/myproject_app/

我已在/ etc / nginx / sites-available /文件夹中创建了我的nginx conf flie,其中包含以下内容:

server {
    listen       80;
    server_name  my_ip;
    charset      utf-8;

    client_max_body_size       10m;
    client_body_buffer_size    128k;

    # serve static files
    location /static/ {
        alias /home/centos/myproject_app/app/static/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/centos/myproject_app/django.sock;
    }
}

之后,我使用以下命令重新启动nginx

sudo systemctl restart nginx

如果我运行命令sudo nginx -t,则响应为:

nginx: configuration file /etc/nginx/nginx.conf test is successful

当我在网络浏览器中访问my_ip时,我收到了502错误的网关响应。

如果我检查nginx错误日志,我会看到以下消息:

1 connect() to unix:/home/centos/myproject_app/django.sock failed (13: Permission denied) while connecting to upstream

我确实尝试了很多改变sock文件权限的解决方案。但我不明白如何解决它。如何修复此权限错误?...非常感谢

3 个答案:

答案 0 :(得分:3)

如果myproject_app文件夹下的所有权限都正确,并且centos用户或nginx组可以访问这些文件,我会说它看起来像安全增强型Linux(SELinux) )问题。

我有类似的问题,但是使用RHEL 7.我设法通过执行以下命令来解决它:

sudo semanage permissive -a httpd_t

它与SELinux的安全策略有关,您必须将httpd_t添加到许可域列表中。

NGINX博客中的这篇文章可能会有所帮助:NGINX: SELinux Changes when Upgrading to RHEL 6.6 / CentOS 6.6

受类似问题的影响,我不久前在How to Deploy a Django Application on RHEL 7上写了一篇教程。它应该与CentOS 7非常相似。

答案 1 :(得分:0)

最有可能是两个中的一个

1- nginx /home/centos/myproject_app/

无法访问该目录
$ ls -la /home/centos/myproject_app/

如果无法访问,请尝试将路径更改为/etc/nginx 如果没有,那么尝试命令

$ /home/centos/myproject_app/django_env/bin/gunicorn --workers 3 --bind unix:/home/centos/myproject_app/django.sock app.wsgi:application

如果仍然无法工作然后激活环境并python manage.py runserver 0.0.0.0:8000转到浏览器并转到http://ip:8000问题可能在这里,但是gunicorn的命令运行良好,那么目录访问中的问题对于nginx用户

答案 2 :(得分:0)

这里也是同样的问题。

移除Group=www-data为我解决了这个问题