码迷,mamicode.com
首页 > 其他好文 > 详细

使用Nginx反向代理Flask站点

时间:2015-06-04 13:58:43      阅读:995      评论:0      收藏:0      [点我收藏+]

标签:

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

使用Nginx反向代理Flask站点

标签:

原文地址:http://my.oschina.net/lvyi/blog/424682

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!