2

我正在关注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) bad gateway 错误。当我使用端口时,我的网站运行良好。我在这里做错了什么?

4

3 回答 3

3

将您的套接字文件放在/var/run而不是/tmp

欢迎你。

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

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

于 2019-04-24T08:35:05.093 回答
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.socketgunicorn.conf的后续步骤,但我只是注意到我的套接字状态是非活动的,所以我想这不是必需的。

gunicorn.conf 文件在/usr/lib/tmpfiles.d/gunicorn.conf

d /run/gunicorn 0755 someuser someuser -

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

$ systemctl 启用 nginx.service $ systemctl 启用 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 的零知识我认为还可以。

希望它有帮助,继续尝试直到它有效!

于 2016-09-05T19:59:15.810 回答
0

尝试将您的用户添加到 nginx 组,例如:

sudo usermod -a -G user nginx
于 2022-02-12T04:04:40.343 回答