带有unix socket的Gunicorn不工作会给502坏网关

时间:2016-09-01 23:13:32

标签: django nginx gunicorn unix-socket bad-gateway

我正在关注http://www.obeythetestinggoat.com/book/chapter_08.html书,它说添加一个unix套接字来运行带有gunicorn的nginx服务器,我做了。 这是我的nginx文件

server {
listen 80;
server_name mydjsuperlist-staging.tk;

location /static {
alias /home/elspeth/sites/mydjsuperlist-staging.tk/static;
}

location / {
proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/mydjsuperlist-staging.tk.socket;
}
} 

Nginx重新加载没有任何失败,并使用nginx -t

进行检查

当我跑步时:

gunicorn --bind unix:/tmp/mydjsuperlist-staging.tk.socket superlists.wsgi:application

它在tmp文件夹中成功创建了mydjsuperlist-staging.tk.socket文件,我在终端上创建了这个文件

2016-09-01 18:56:01 [15449] [INFO] Starting gunicorn 18.0
2016-09-01 18:56:01 [15449] [INFO] Listening at: unix:/tmp/mydjsuperlist-staging.tk.socket (15449)
2016-09-01 18:56:01 [15449] [INFO] Using worker: sync
2016-09-01 18:56:01 [15452] [INFO] Booting worker with pid: 15452

一切似乎都很好,但是当我访问我的网站mydjsuperlist-staging.tk时,它会出现(502)错误的网关错误。 当我使用端口时,我的网站运行完美。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我也在做相同的教程,所以这是我的解决方案: http://docs.gunicorn.org/en/stable/deploy.html

注意:我没有使用Upstart,我正在使用SystemD服务

1)在/etc/systemd/system/nginx.service

中提供服务
[Unit]
Description=Gunicorn server for {SITENAME}
After=network.target

[Service]
User={user}
Group=www-data
WorkingDirectory=/home/{user}/sites/{SITENAME}/source
ExecStart=/home/{user}/sites/{SITENAME}/virtualenv/bin/gunicorn --workers 3 --bind unix:/tmp/{SITENAME}.socket superlists.wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target

2)我按照http://docs.gunicorn.org/en/stable/deploy.html制作 gunicorn.socket gunicorn.conf 的后续步骤,但我只是注意到我的套接字状态是不活跃,所以我认为没有必要。

/usr/lib/tmpfiles.d/gunicorn.conf

中的gunicorn.conf文件
d /run/gunicorn 0755 someuser someuser -

接下来启用服务,以便它们在启动时自动启动:

  

$ systemctl enable nginx.service   $ systemctl enable gunicorn.socket

重启或手动启动服务:

  

$ systemctl start nginx.service   $ systemctl start gunicorn.socket

一些有用的提示:

  • 确保您的服务已启动并正在运行
      

    $ systemctl status gunicorn.service

  • 检查Nginx配置是否正常
      

    $ sudo nginx -t

  • 检查错位的字母
  • 确保将您的域名置于ALLOWED_HOSTS字符串中,花了1个小时才意识到我想念' '

ALLOWED_HOSTS = [**'**{SITENAME}**'**]

我花了6个小时让它运行但是我第一次这样做并且在Unix上没有任何知识我认为没问题。

希望它有所帮助,继续努力直到它起作用!!

答案 1 :(得分:1)

将套接字文件放入 / var / run 而不是 / tmp

不客气。

这个答案花了我两个小时,fml ...

我在https://serverfault.com/questions/463993/nginx-unix-domain-socket-error/464025#464025

中找到了它