侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

nginx代理多个flask

2023-12-22 星期五 / 0 评论 / 0 点赞 / 147 阅读 / 7015 字

nginx 代理多个flask本文讲述如何用nginx代理多个flask,从而进行负载均衡所需准备 :1. nginx 它的安装可以参考 http://www.cnblogs.com

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用户身份来启动)  

广告 广告

评论区