使用nginx+gunicorn发布flask应用

  • 2017-09-21 11:50:55
  • 运维
  • 28
  • shevechco

Gunicorn 绿色独角兽 是一个Python WSGI UNIX的HTTP服务器。这是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速

Gunicorn的安装比较简单

pip install Gunicorn

然后就可以直接使用gunicorn启动我们的flask应用了

gunicorn -w 3 --threads=4 -b 0.0.0.0:9090 manager:app --reload -t 300 -D --access-logfile log/gunicorn.log

以上启动命令的含义为

-w 3 开启3个进程,一般使用服务器cpu数量+1
--threads=4 根据自己的实际情况来设置 0.0.0.0:9090 定义9090端口 manager:app manager为项目的文件名,如上面的manager.py文件名,app为manager.py代码中 app = Flask(__name__) –realod 监听到项目文件变动自动重启gunicorn使之生效,生产环境建议去除 -t 300 配置每个请求的超时时间为300-D 让命令后台执行 –access-logfile log/gunicorn.log 将请求日志保存到该文件中

以上我们就可以使用9090端口来访问我们的接口,到这里已经差不多了,但是我们还需要在web最外层用nginx 做下代理提升静态文件的web性能

由于gunicorn对静态处理能力不是太好,我们可以使用nginx做外层的反响代理带处理网站中的静态文件

nginx配置如下,flask的静态资源需要使用别名来指定目录,不然会出现无法加载或者加载路径的问题

server {
    listen 80;
    server_name www.sulao.cn sulao.cn;
    rewrite ^(.*) https://sulao.cn$1 permanent;
}
server {
        listen 443 ssl;
        server_name sulao.cn;
        ssl_certificate   /data/blog/sslkey/sulao.cn.pem;
        ssl_certificate_key  /data/blog/sslkey/sulao.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_buffer_size 1400;
        add_header Strict-Transport-Security max-age=15768000;
        ssl_stapling on;
        ssl_stapling_verify on;
        location /static {
                alias /data/blog/apps/static;
        }
        location / {
               proxy_pass http://127.0.0.1:9090;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-Proto $scheme;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               add_header X-Frame-Options SAMEORIGIN;
        }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/426

相关推荐