python - 如何在云服务器上部署Flask+Gunicorn+Nginx+supervisor?

python - 如何在云服务器上部署Flask+Gunicorn+Nginx+supervisor?

从昨天开始,我已经阅读了很多关于这个问题的说明,但它们的步骤都差不多。然而,我一步一步地按照说明操作,但仍然无法解决问题。

实际上我可以让 Flask+Gunicorn+supervisor 工作,但 Nginx 工作得不太好。

我使用 SSH 连接我的远程云服务器,但没有在我的计算机上部署网站。

Nginx 安装正确,因为当我通过域名(又名example.com)访问该网站时,它会显示 Nginx 欢迎页面。

我用来supervisor启动 Gunicorn,配置如下

[program:myapp]
command=/home/fh/test/venv/bin/gunicorn -w4 -b 0.0.0.0:8000 myapp:app
directory=/home/fh/test
startsecs=0
stopwaitsecs=0
autostart=false
autorestart=false
stdout_logfile=/home/fh/test/log/gunicorn.log
stderr_logfile=/home/fh/test/log/gunicorn.err

这里我将服务器绑定到端口8000我实际上不知道 0.0.0.0 代表什么,但我认为它不代表本地主机,因为我可以通过http://example.com:8000而且效果很好。

然后我尝试使用 Nginx 作为代理服务器。

我删除/etc/nginx/sites-available/default' and '/etc/nginx/sites-enabled/default/并创建了它们/etc/nginx/sites-available/test.com/etc/nginx/sites-enabled/test.com对其进行了符号链接。

test.com

server {
        server_name www.penguin-penpen.com;
        rewrite ^ http://example/ permanent;
}

# Handle requests to example.com on port 80
server {
        listen 80;
        server_name example.com;

        # Handle all locations
        location / {
                # Pass the request to Gunicorn
                proxy_pass http://127.0.0.1:8000;

                # Set some HTTP headers so that our app knows where the request really came from
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

据我了解,Nginx 所做的是,当我访问时,http://example.com它将我的请求传递给http://example.com:8000

我不太确定是否应该proxy_pass http://127.0.0.1:8000在这里使用,因为我不知道 Nginx 是否应该将请求传递给本地主机但我尝试将其改为,0.0.0.0:8000但仍然不起作用。

有人可以帮忙吗?

答案1

nginx 所做的是针对 location / 将请求传递给 proxy_pass 值。在本例中,将请求发送到http://127.0.0.0:8000这意味着你的 gunicorn 必须监听该接口。通常 gunicorn 监听本地主机,例如

 gunicorn --bind 127.0.0.1:8000 myapp:app

这是因为您不希望外部用户直接连接到 gunicorn,而是通过 nginx。

这是一个示例 nginx 配置,可以与上面启动的 gunicorn 配合使用

   location / {
    proxy_read_timeout 120;
    proxy_pass  http://127.0.0.1:8000;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
}

相关内容