博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx代理多个flask
阅读量:6938 次
发布时间:2019-06-27

本文共 4888 字,大约阅读时间需要 16 分钟。

hot3.png

nginx 代理多个flask

本文讲述如何用nginx代理多个flask,从而进行负载均衡

所需准备 :

1. nginx          它的安装可以参考 http://www.cnblogs.com/skynet/p/4146083.html  2. flask          sudo pip install Flask  3. uwsgi          sudo pip install uwsgi              使用uwsgi的原因是,如果光溜溜的flask是很容易崩溃的,          外面套一层uwsgi,实践检验能让flask强壮很多              若无法安装uwsgi这个库,则大多数原因是因为少了两个东西 :              ubuntu系列 :              sudo apt-get install python-dev              sudo apt-get install setuptools              centos系列 :              sudo yum install python-devel              sudo yum install setuptools

下面举个例子,讲讲具体的配置

一. flask程序的信息

1. 我的用flask库写的web服务端程序的根目录 :          /home/seven/program/openmind_server/  2. 在这个目录下,我的程序的入口文件是 main.py          即入口文件的绝对地址是 /home/seven/program/openmind_server/main.py                  且为了使用方便,最好让这个脚本接受两个参数,分别作为这个进程绑定的地址和端口          例如 :          python main.py 127.0.0.1 8081          python main.py 127.0.0.1 8082  3. 在这个脚本中,我的app的名称是 Server_App          即 main.py 中,有类似这样的语句 :                  Server_App = flask.Flask(__name__)          Server_App.secret_key = '\r\x9d1\xd1\xccW\x9e\xa6\x9a\x97[\xb1=\x93\x87\x15s<\xe8\xe3\x13DL?'                  # 注意,若你的flask程序在不同的机子上(一般生产环境下都是这样,是真正的多机负载均衡)          # 则,这个 secret_key 要保持一致,否则session可能无法正常工作

二. uwsgi配置文件 uwsgi8081.ini

[uwsgi]  socket = 127.0.0.1:8081      绑定监听的地址和端口              实际生产环境下 :          1. 建议nginx单独一台服务器,然后其他的flask都在同一网段的其他机子上          2. uwsgi要在 nginx结点,及每台flask结点上 都要安装          3. flask只要在每台flask结点上安装          4. 这个uwsgi配置文件和对应的flask程序是在同一台机子上的      master = true  pidfile = /mydata/openmind_server/pids/uwsgi8081.pid      这个uwsgi进程的pid文件的路径(建议使用绝对路径)  chdir = /home/seven/program/openmind_server/      你的用flask库编写的服务端程序的根目录的路径      (建议使用绝对路径,且最后有'/')      (若flask程序位于不同机子上,则要保证各机子上的路径是一致的)  wsgi-file = main.py      在上述目录下,你的入口脚本的名字  callable = Server_App      在上述入口脚本中,你的flask的app对象的名字  processes = 2      该值建议与CPU核数相同  threads = 4      占用的线程数  stats = 127.0.0.1:9091      查询状态信息的端口  logdate=true  daemonize=/mydata/openmind_server/logs/flask8081.log      以后台方式运行,且指定日志文件的路径(建议使用绝对路径)  ( uwsgi8082.ini, uwsgi8083.ini, uwsgi8084.ini 与之类似,改端口和路径即可)

三. nginx配置文件 /usr/local/nginx/conf/nginx.conf

worker_processes  2;      # 建议与CPU核数相同  error_log  /mydata/nginx/log/error.log;      # 错误日志的路径(建议使用绝对路径)      # 且除了它,在 /usr/local/nginx/logs/error.log 也有一部分的错误日志  pid        /mydata/nginx/pid/nginx.pid;      # 进程号文件的路径(建议使用绝对路径)  events {      use epoll;          # epoll效率比轮询要高      multi_accept on;      worker_connections  1024;          # 最大连接数  }  http {      include       mime.types;      default_type  application/octet-stream;      server_names_hash_bucket_size 128;      client_header_buffer_size 32k;      client_body_buffer_size 512k;      client_max_body_size 32m;      large_client_header_buffers 4 32k;      access_log  /mydata/nginx/log/access.log;          # 访问日志路径(建议使用绝对路径)      sendfile        on;      tcp_nodelay on;      server_tokens off;      access_log off;      charset UTF-8;      keepalive_timeout  60;      open_file_cache max=1024 inactive=20s;      open_file_cache_valid 60s;      open_file_cache_min_uses 2;      upstream my_servers {          server 127.0.0.1:8081;          server 127.0.0.1:8082;          server 127.0.0.1:8083;          server 127.0.0.1:8084;      }      # 转发配置 :      # 一共可以转发到本机的8081,8082,8083,8084四个结点上      # 实际生产环境中建议flask结点在其他机子上      server {          listen       80;              # 对外暴露80端口          server_name  localhost default backlog=256;          access_log  /mydata/nginx/log/host.access.log;          location / {              uwsgi_pass my_servers;              include uwsgi_params;              uwsgi_param UWSGI_CHDIR /home/seven/program/openmind_server/;              uwsgi_param UWSGI_SCRIPT main;          }          # 转发配置 :          # 通过使用上面定义的 upstream my_servers 来进行负载均衡          # 且指定flask程序的根目录          # 且指定flask程序根目录下的入口脚本的名称(不包含后缀名)          # redirect server error pages to the static page /50x.html          error_page   500 502 503 504  /50x.html;          location = /50x.html {              root   html;          }      }  }

四. 启动方式

uwsgi --ini path/uwsgi8081.ini      启动8081结点(以非root用户的身份来启动)  uwsgi --ini path/uwsgi8082.ini      启动8082结点(以非root用户的身份来启动)  uwsgi --ini path/uwsgi8083.ini      启动8083结点(以非root用户的身份来启动)  uwsgi --ini path/uwsgi8084.ini      启动8084结点(以非root用户的身份来启动)  cd /usr/local/nginx/sbin      进入nginx的脚本目录  ./nginx      启动nginx(注意要以root用户身份来启动)

五. 重启方式

uwsgi --reload path/uwsgi8081.pid      重启8081结点(指定对应的pid文件,以非root身份)  uwsgi --reload path/uwsgi8082.pid      重启8082结点(指定对应的pid文件,以非root身份)  uwsgi --reload path/uwsgi8083.pid      重启8083结点(指定对应的pid文件,以非root身份)  uwsgi --reload path/uwsgi8084.pid      重启8084结点(指定对应的pid文件,以非root身份)  cd /usr/local/nginx/sbin      进入nginx的脚本目录  ./nginx -s stop      关闭nginx(注意要以root用户身份来关闭)  ./nginx      再次启动nginx(注意要以root用户身份来启动)

转载于:https://my.oschina.net/340StarObserver/blog/744381

你可能感兴趣的文章
KVM Bonding Vlan Bridge功能测试
查看>>
我的友情链接
查看>>
把握数据库发展趋势 DBA应如何避免“踩坑”?
查看>>
Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件
查看>>
P2V实现VMware Workstation 虚拟机到ESXi主机
查看>>
OpenGL入门学习[七]
查看>>
ip v5
查看>>
SQL高级查询技巧
查看>>
jar not loaded. org.apache.jasper.JasperExcep
查看>>
ls命令详解
查看>>
【Oracle】数据库启动阶段参数文件、控制文件的问题处理
查看>>
使用Metasploit工作区
查看>>
6425C-Lab13 管理站点与AD复制
查看>>
[转载]中国648个超级亿万富豪都是谁?
查看>>
快捷键
查看>>
mac系统快捷键大全详细介绍
查看>>
shell列变行
查看>>
IOS学习笔记(七)之UISegmentedControl分段控件的基本概念和使用方法
查看>>
结构体指定初始化和位初始化
查看>>
提高性能,MySQL 读写分离环境搭建(二)
查看>>