Nginx实际上只能处理静态资源请求,那么对于动态请求怎么做呢。这就需要用到Nginx的upstream
模块对这些请求进行转发,即反向代理。这些接收转发的服务器可以是Apache、Tomcat、IIS等。示意图如下:
现在对一个Python Flask的站点进行反向代理设置,站点的源码存放在Github。在本机Min17中目录如下:
/
+- srv/
+- www/
+- GoLink/ <-- Web App根目录
+- www/
| +- static/ <-- 存放静态资源文件
| +- index.py <-- Python源码
部署方式
由于flask是单进程处理请求的,不像Tornado的异步,同时访问的人数稍微过多,就会出现阻塞的情况,导致Nginx出现502的问题。而Gunicorn可以指定多个工作进程,这样就可以实现并发功能。
Nginx可以作为服务进程直接启动,但Gunicorn还不行。可以使用Supervisor管理Gunicorn进行自启动。
总结一下我们需要用到的服务有:
Nginx:高性能Web服务器+负责反向代理;
gunicorn:高性能WSGI服务器;
gevent:把Python同步代码变成异步协程的库;
Supervisor:监控服务进程的工具;
配置Nginx
Nginx配置文件位于/usr/local/nginx/conf/nginx.conf
,为了便于管理,新建一个site
文件夹存放我们对配置的添加更改。在site
中新建app.conf
配置文件。
在nginx.conf
中添加
http {
include sites/*.conf;
# ...
}
在app.conf
中添加
server {
listen 80; # 监听80端口
root /srv/www/GoLink/www;
server_name localhost; # 配置域名
# 处理静态资源:
location ~ ^\/static\/.*$ {
root /srv/www/GoLink/www;
}
# 动态请求转发到8000端口(gunicorn):
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启动Gunicorn让web APP运行起来,重新加载Nginx配置文件:
$ gunicorn index:app
$ sudo .nginx -s reload
这时在浏览器中输入 http://127.0.0.1:80
即可访问网站。
参考
http://rfyiamcool.blog.51cto.com/1030776/1276364
http://spacewander.github.io/explore-flask-zh/14-deployment.html
时间: 2024-11-09 02:26:14