【问题标题】:Nginx not forwarding traffic to GunicornNginx 不向 Gunicorn 转发流量
【发布时间】:2018-01-28 07:02:52
【问题描述】:

我有一个尝试使用 Gunicorn 和 Nginx 托管的 Flask 应用程序。我已经学习了几个教程,但我似乎无法让 Nginx 停止呈现“欢迎使用 Nginx”页面。

我已经确认 Supervisor 成功启动了三个 Gunicorn worker,并且 Nginx 也在后台运行。 SSL 已确认工作,并且 Nginx 在端口 443 上获取流量。我已尝试将 Nginx 添加到与拥有 Gunicorn 和 Nginx 共享的 sock 的用户相同的组中。

这是 Supervisor 用来启动 Gunicorn 的 bash 脚本。这是确认工作。

#!/bin/bash

NAME="Simon"                                  
FLASKDIR=/var/www/Simon            
SOCKFILE=/var/www/Simon/simon.sock
USER=glen                                        
GROUP=glen                                   
NUM_WORKERS=3
FLASK_SETTINGS_MODULE=config.py         
FLASK_WSGI_MODULE=Simon.wsgi
echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $FLASKDIR
source Simon/bin/activate
export FLASK_SETTINGS_MODULE=$FLASK_SETTINGS_MODULE
export PYTHONPATH=$FLASKDIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

exec gunicorn Simon:simon \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \

这个网站配置:

upstream simon_server {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).

  server unix:/var/www/Simon/simon.sock fail_timeout=0;
}

server {

    listen   443 ssl;
    server_name glencoverx.com;

    client_max_body_size 4G;

    access_log /var/www/Simon/logs/nginx-access.log;
    error_log /var/www/Simon/logs/nginx-error.log;

    location /static/ {
        alias   /var/www/Simon/static/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;

    if ($scheme != "https") {
        return 301 https://$host$request_uri;}

} 
    ssl_certificate /etc/letsencrypt/live/glencoverx.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/glencoverx.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
}

奇怪的是,日志显示没有问题。我已经完全删除了 Nginx 默认站点配置并删除了它的符号链接。我不明白为什么 Nginx 不会与 Gunicorn 通信。

【问题讨论】:

    标签: python nginx flask


    【解决方案1】:

    首先,如果您执行以下操作会很有帮助: listen 443 default ssl; 这将使该网站成为默认网站。

    如果您还没有,请service nginx restart 并确保您的缓存已清除。尝试使用 telnet 来确保它仍然处于启用状态。

    检查您的 nginx/conf.d 和启用站点的目录以查看符号链接或默认网站是否仍然存在。

    【讨论】:

    • 不确定是否是您的建议造成的,但现在突然完全拒绝连接,可能是因为端口 80 不再重定向。直接使用 https 导航到域会导致 502。
    • 看起来它已固定在 443 上。我没有将代理传递给 sock。但是现在不直接使用 https 就无法连接。
    猜你喜欢
    • 2017-09-02
    • 2019-05-23
    • 2021-01-20
    • 2020-12-04
    • 2019-06-15
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    相关资源
    最近更新 更多