nginx代理多个flask
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相关推荐
- Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起,因为都用到了location. 打开配置文件,注释 ...
- nginx代理响应报文体不全解决思路
问题说明 环境说明: centos 6.5 nginx 1.13.7 tomcat 8.5+ jdk 1.8 问题描述 本地访问测试机接口发生异常 curl访问结果: tomcat日志: 解决思路 开 ...
- FastDFS + Nginx代理方式访问
FastDFS + Nginx代理方式访问 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.在storage上安装nginx 1>.下载nginx软件(http://ngi ...
- go 通过nginx代理后获取用户ip
go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...
- 开发程序实现nginx代理节点状态检查及WEB界面展示
实现功能介绍: 利用shell程序及http服务巧妙的实现监控nginx代理节点状态检查,然后通过web界面实时刷新显示结果,是不是有些吃惊这样高大上的程序?那就赶紧看看吧! to用人单位:此课程可以 ...
- Nginx.代理MySQL
Nginx.代理MySQL 1. Nginx在安装的时候,需要加上一个参数:--with-stream 即Nginx安装指令为:./configure --prefix=/u01/app/nginx ...
- Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理
2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问. ...
- Nginx代理、负载均衡
Nginx代理 #cd /usr/local/nginx/conf/vhost #vim proxy.conf //加入如下内容 server { listen 80; server_name ask ...
- Nginx 代理转发阿里云OSS上传的实现代码
这篇文章主要介绍了Nginx 代理转发阿里云OSS上传的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 前言 因为小程序上传需要https,服务器https用的是 ...
最新文章
- 【转】css行高line-height的一些深入理解及应用
- python3.5升级_python升级 (2.6升级到3.5)
- 软考-信息系统项目管理师-信息系统安全管理
- lintcode 中等题:A + B Problem A + B 问题
- IOS开发之CALayer基本属性和使用
- visio对象放入word显示不全_办公人士必学visio技能 手把手教你使用visio绘制项目全景图!...
- gitlab贡献率_如何为GitLab做贡献
- 下一代软件工程的思考与点滴实践
- 原创:PHP乱码怎么办?五种方法彻底解决PHP乱码问题
- transient、Externalizable
- 用CALayer实现下载进度条
- C# winform开发的考试系统
- java大牛博客链接合集
- 阿里矢量图可根据样式修改颜色
- Qt实现一个简单的钟表
- 【Pygame实战】强烈推荐:教你用百行代码编写一款《小蜜蜂历险记》不信?来看看(玩儿嗨了~)
- CSP 2018-9-4 再卖菜 搜索 + 剪枝
- Python中MNE库的事件相关特定频段分析(MEG数据)
- 无线标准802.11ac 和 802.11ax到底有什么区别?哪个更快?
- 如何在Ubuntu上安装并使用Docker
热门文章
- c语言中注释部分执行,深入C语言内存区域分配(进程的各个段)详解
- linux内核报告,Linux升级内核报告.docx
- 高速串行总线设计基础(三)SERDES的通用结构介绍
- [洛谷P5137]polynomial
- ES transport client批量导入
- 每个优秀程序员必须具备的技能
- SQL分组多列统计(GROUP BY后按条件分列统计)
- 5.数字拆分成4段,怎样使得4段的乘积最小【dp】
- 苹果2010新品发布会图文实录
- android luajava,android嵌入lua