使用Nginx反向代理Flask站点

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

使用Nginx反向代理Flask站点的相关文章

nginx反向代理https站点

基本的代理配置就不说了 现在贴出配置并强调几点容易出错的问题. user              nginx; worker_processes  1; error_log  /var/log/nginx/error.log; pid        /var/run/nginx.pid; events { worker_connections  1024; } http { include       /etc/nginx/mime.types; default_type  applicati

Nginx反向代理的配置

Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之支持PHP 5. 以源码编译的方式安装PHP与php-fpm 6. Nginx多站点配置的一次实践 7. Nginx反向代理的配置 Nginx 作为 web 服务器一个重要的功能就是反向代理.其实我们在前面的一篇文章<Nginx多站点配置的一次实践>里,用的就是 Nginx 的反向代理,这里简单再

Php学习之nginx反向代理详解

本文和大家分享的主要是php中nginx反向代理相关内容,一起来看看吧,希望对大家学习php有所帮助. 一.概念理解 1.代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机. 2.为什么要使用代理服务器 ①提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存

Nginx 反向代理、负载均衡

## Nginx 反向代理. (一)简介 一.什么是代理服务器 客户机原本发送给服务器的请求,不会直接发送给服务器,而是先发送给代理服务器:经过代理服务器处理后转发给服务器:服务器数据处理后转回给代理服务器,代理服务器再返回给客户机的一个过程. 二.代理服务器的作用 1. 防火墙作用 由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息: 2. 提高Web访问速度 可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力: 3. 实现

基于Nginx反向代理及负载均衡

基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是开启的,因为proxy属于nginx内置标准模块,通常实现代理的时候,最核心模块是proxy_pass,用于将用户请求的rui递交至上游服务器的某个URI但这个模块大部分用于location当中,因此要实现将某一URI的访问代理某个上游服务器大致的格式为: location /name/ { pro

Linux平台部署nginx反向代理实例

nginx有着优秀的代理性能,很多情况下,nginx常常被充当反向代理服务器负载后端应用web构建起一个高性能高可用的web集群(淘宝tengix ,京东的nginx集群都使用到了nginx反向代理功能),接下来给大家讲解Linux平台部署nginx反向代理实例. [本文档所介绍的内容适用于公司测试/生产等常见的nginx反向代理应用] 1. nginx环境部署前准备: 1.1相关软件以及系统 系统要求:Centos 6.0以上 (64位) 相关中间件:Nginx: 1.6.0 以上(包含1.6

Nginx反向代理https服务

背景: 最近因工作需要,需在web前端做一个代理,来解决部分用户不能访问的需求:之前通过nginx反向代理已实现对web的代理,但后来发现还有站点为https的,所以又找了些资料,整理了一下,测试完成. 方法: Nginx代理web站点ttxsgoto.com的相关部署和配置主要如下脚本实现: #!/bin/bash path_soft=$(pwd) function base(){ yum -y install  make gcc gcc-c++ autoconf } function ins

Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)

需求分析: 现有3个二级域名,一个IP地址,要实现将这3个域名通过1个IP地址对外提供web服务,可使用IP+端口的方式对域名进行解析,且互不影响.如: Domain1:www.huangming.org     IPADDR:192.168.1.33:80 Domain2:web1.huangming.org    IPADDR:192.168.1.33:8080 Domain3:web2.huangming.org    IPADDR:192.168.1.33:8080 其中Domain1作

nginx反向代理原理和配置讲解

最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接