windows下使用Nginix发布flask应用

上一篇文章了用twisted的WSGI容器发flask应用,用python开发web服务总有些担心,最典型的是头部可信问题,官方建议是使用Nginx代理,也就是用Nginx代理twisted的服务。在Nginx代理后面使用twisted运行WSGI应用,必须重写一些头部变量,经常会出现问题的有两个变量REMOTE_ADDR 和 HTTP_HOST。设置如下

server {
    listen 80;
    server_name _;
    access_log  log/access.log;
    error_log   log/error.log;
    location / {
        #WSGI应用地址
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;
        proxy_set_header   Host                 $host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto    $scheme;
    }
}

注意:

  1. httpd无法提供头部信息,可以调用 X-Forwarded-Host 定义的主机和 X-Forwarded-For 定义的远程地址。官方给的例子是:
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)

3.不使用Nginx代理情况下使用twisted有安全问题的,它会盲目信任恶意客户端发来的头部。
官方给的例子是:

class CustomProxyFix(object):

    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        host = environ.get('HTTP_X_FHOST', '')
        if host:
            environ['HTTP_HOST'] = host
        return self.app(environ, start_response)

app.wsgi_app = CustomProxyFix(app.wsgi_app)

我使用的是OpenResty,关于OpenResty和Nginx的这里就不介绍了,总之是中国大牛做的东西必须支持,中文文档比较多,还可以用lua进行扩展。openresty链接
下载Openresty
Openresty版的目录如下
配置conf
配置Nginx.conf文件
在这里插入图片描述
除了上面提到代理设置还要考虑以下几点

  1. 代理配置
	client_body_buffer_size  512k;
    proxy_connect_timeout    5;
    proxy_read_timeout       60;
    proxy_send_timeout       5;
    proxy_buffer_size        16k;
    proxy_buffers            4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
  1. gzip 压缩设置
	gzip on;
    gzip_min_length  5k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    #根据需要设置
    gzip_types       text/plain application/x-javascript text/css application/xml application/json image/jpeg image/gif image/png;
    gzip_vary on;
  1. 缓存设置
    缓存时间可以设置为秒(m),小时(h),天(d)等
   #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
   proxy_temp_path   temps;
   #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,5小时没有被访问的内容自动清除,硬盘缓存空间大小为10GB。
   proxy_cache_path  temps  levels=1:2   keys_zone=cache_one:200m inactive=4h max_size=10g;
  1. 清除缓存设置
        #用于清除缓存,/clear/就可以清除该URL的缓存!
        location ~ /clear(/.*)
            {
             #设置允许清除URL缓存的IP。
             allow            127.0.0.1;
             deny            all;
             proxy_cache_purge    cache_one   $host$1$is_args$args;
            }
        location /nstatus{
            check_status;
            access_log off;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值