自昨天以来,我已经阅读了很多有关此问题的说明,但所有这些说明都有类似的步骤。然而,我一步一步地遵循,但仍然无法让一切都好。
实际上我可以让Flask + Gunicorn +主管工作,但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;
}
}
根据我的理解,当我访问http://example.com
时,Nginx会做的是将请求传递给http://example.com:8000
。
我不太确定我应该在这里使用proxy_pass http://127.0.0.1:8000
,因为我不知道Nginx是否应该将请求传递给localhost 但我已经尝试将其更改为0.0.0.0:8000
但它仍然不起作用。
有人可以帮忙吗?
答案 0 :(得分:0)
0.0.0.0
表示服务器将接受来自所有IP地址的连接。有关详细信息,请参阅https://en.wikipedia.org/wiki/0.0.0.0。
如果gunicorn服务器侦听127.0.0.1
,则只有您(或同一台带有gunicorn服务器的其他人)可以通过本地循环https://en.wikipedia.org/wiki/Local_loop访问它。
但是,由于您使用Nginx接受来自互联网的连接,您只需proxy_pass http://127.0.0.1:8000;
并将命令更改为command=/home/fh/test/venv/bin/gunicorn -w4 -b 127.0.0.1:8000 myapp:app
。在这种情况下,gunicorn本身只需要接受来自Nginx的连接,该连接在与gunicorn相同的机器上运行。
整个过程看起来像这样
Connections from the Internet -> Nginx (reverse proxy, listen on 0.0.0.0:80) -> Gunicorn (which runs your Python code, listen on 127.0.0.1:8000)