如何设置Gunicorn服务Python Web应用程序

・3 分钟阅读

在本文中,我们将设置VPS以使用Gunicorn和Nginx作为反向代理来提供Python Web应用程序。我们使用Nginx作为反向代理,而不是直接使用Gunicorn,这样可以防止对Gunicorn的攻击,使用Nginx也会带来更好的性能(使用代理缓冲),并可以处理更多的请求。

入门

  • 我们的nginx实例会在HTTP端口80上运行,但是,你可以轻松升级到HTTPS,
  • 我们的例子python app会侦听端口8080 ,此端口会在iptables上关闭以防止远程访问,
  • 本教程应该在其他发行版上使用,只需要很少的更改。

安装pipvirtualenv


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浏览器访问它。

Zuoxiaojuan profile image