如何设置Gunicorn服务Python Web应用程序
Zuoxiaojuan
・3 分钟阅读
在本文中,我们将设置VPS以使用Gunicorn和Nginx作为反向代理来提供Python Web应用程序。我们使用Nginx作为反向代理,而不是直接使用Gunicorn,这样可以防止对Gunicorn的攻击,使用Nginx也会带来更好的性能(使用代理缓冲),并可以处理更多的请求。
入门
- 我们的nginx实例会在HTTP端口80上运行,但是,你可以轻松升级到HTTPS,
- 我们的例子python app会侦听端口8080 ,此端口会在iptables上关闭以防止远程访问,
- 本教程应该在其他发行版上使用,只需要很少的更改。
安装pip
,virtualenv
:
apt-get install python-pip python-virtualenv
关闭端口8080只有nginx才能访问Gunicorn
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
创建一个新文件夹,并且配置我们的应用程序,我们将使用Flask框架。
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
创建应用程序文件。
nano myapplication.py
粘贴以下内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, !'
这将产生一个简单的页面,当有人访问页面时,"Hello!" 就会出现,现在,启动Gunicorn将x
替换为虚拟机CPU核数的2倍。
gunicorn -w x myapplication:app &
安装Nginx并配置反向代理。
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
搜索location/{
行并用以下内容替换括号内的内容。
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8000/;
这个配置指示Nginx向Gunicorn服务器转发一些信息(HTTP协议,远程IP地址)以及实际的请求,重新加载Nginx 。
service nginx reload
至此,你的Gunicorn应用程序已经正确配置,你可以使用http://your-vps-ip/
上的web浏览器访问它。