从昨天开始,我已经阅读了很多关于这个问题的说明,但它们的步骤都差不多。然而,我一步一步地按照说明操作,但仍然无法解决问题。
实际上我可以让 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;
}