2019独角兽企业重金招聘Python工程师标准>>>

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

nginx代理多个flask相关推荐

  1. Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理

    2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...

  2. nginx代理响应报文体不全解决思路

    问题说明 环境说明: centos 6.5 nginx 1.13.7 tomcat 8.5+ jdk 1.8 问题描述 本地访问测试机接口发生异常 curl访问结果: tomcat日志: 解决思路 开 ...

  3. FastDFS + Nginx代理方式访问

    FastDFS + Nginx代理方式访问 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.在storage上安装nginx 1>.下载nginx软件(http://ngi ...

  4. go 通过nginx代理后获取用户ip

    go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...

  5. 开发程序实现nginx代理节点状态检查及WEB界面展示

    实现功能介绍: 利用shell程序及http服务巧妙的实现监控nginx代理节点状态检查,然后通过web界面实时刷新显示结果,是不是有些吃惊这样高大上的程序?那就赶紧看看吧! to用人单位:此课程可以 ...

  6. Nginx.代理MySQL

    Nginx.代理MySQL 1. Nginx在安装的时候,需要加上一个参数:--with-stream 即Nginx安装指令为:./configure --prefix=/u01/app/nginx  ...

  7. Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理

    2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问. ...

  8. Nginx代理、负载均衡

    Nginx代理 #cd /usr/local/nginx/conf/vhost #vim proxy.conf //加入如下内容 server { listen 80; server_name ask ...

  9. Nginx 代理转发阿里云OSS上传的实现代码

    这篇文章主要介绍了Nginx 代理转发阿里云OSS上传的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 前言 因为小程序上传需要https,服务器https用的是 ...

最新文章

  1. 【转】css行高line-height的一些深入理解及应用
  2. python3.5升级_python升级 (2.6升级到3.5)
  3. 软考-信息系统项目管理师-信息系统安全管理
  4. lintcode 中等题:A + B Problem A + B 问题
  5. IOS开发之CALayer基本属性和使用
  6. visio对象放入word显示不全_办公人士必学visio技能 手把手教你使用visio绘制项目全景图!...
  7. gitlab贡献率_如何为GitLab做贡献
  8. 下一代软件工程的思考与点滴实践
  9. 原创:PHP乱码怎么办?五种方法彻底解决PHP乱码问题
  10. transient、Externalizable
  11. 用CALayer实现下载进度条
  12. C# winform开发的考试系统
  13. java大牛博客链接合集
  14. 阿里矢量图可根据样式修改颜色
  15. Qt实现一个简单的钟表
  16. 【Pygame实战】强烈推荐:教你用百行代码编写一款《小蜜蜂历险记》不信?来看看(玩儿嗨了~)
  17. CSP 2018-9-4 再卖菜 搜索 + 剪枝
  18. Python中MNE库的事件相关特定频段分析(MEG数据)
  19. 无线标准802.11ac 和 802.11ax到底有什么区别?哪个更快?
  20. 如何在Ubuntu上安装并使用Docker

热门文章

  1. c语言中注释部分执行,深入C语言内存区域分配(进程的各个段)详解
  2. linux内核报告,Linux升级内核报告.docx
  3. 高速串行总线设计基础(三)SERDES的通用结构介绍
  4. [洛谷P5137]polynomial
  5. ES transport client批量导入
  6. 每个优秀程序员必须具备的技能
  7. SQL分组多列统计(GROUP BY后按条件分列统计)
  8. 5.数字拆分成4段,怎样使得4段的乘积最小【dp】
  9. 苹果2010新品发布会图文实录
  10. android luajava,android嵌入lua