【发布时间】: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 通信。
【问题讨论】: