博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx + uWSGI + Flask + Vhost
阅读量:5791 次
发布时间:2019-06-18

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

hot3.png

1.准备工作

先装好nginx virtualenv flask uwsgi等。
nginx配置路径/etc/nginx
virtualenv路径 /opt/pyenv/
装有flask的一个env /opt/pyenv/flask0.8/
两个虚拟主机目录 /var/pywww/app1 /var/pywww/app2

2.配置

/etc/nginx/conf.d/virtual.conf

server {    listen       80;    server_name  app1.mydomain.com;    location / {        include uwsgi_params;        uwsgi_pass 127.0.0.1:9090; #uwsgi运行的主机和ip,后面我们会在本机的9090端口上运行uwsgi进程        uwsgi_param UWSGI_PYHOME /opt/pyenv/flask_0.8; #运行python脚本的virtualenv路径        uwsgi_param UWSGI_CHDIR /var/pywww/app1; #网站根目录        uwsgi_param UWSGI_SCRIPT main:app; # 本例以根目录下的main.py中的app对象作为一个callble让uwsgi调用    }}server {    listen       80;    server_name  app2.mydomain.com;    location / {        include uwsgi_params;        uwsgi_pass 127.0.0.1:9090;        uwsgi_param UWSGI_PYHOME /opt/pyenv/flask_0.8;        uwsgi_param UWSGI_CHDIR /var/pywww/app2;        uwsgi_param UWSGI_SCRIPT test:apppp; #同理,本例以根目录下的test.py中的apppp对象作为一个callble让uwsgi调用    }}

3.建立测试用的flask入口

/var/pywww/app1/下建立main.py

from flask import Flask app = Flask(__name__)@app.route("/")def hello():    return "Hello app1!"

/var/pywww/app2/下建立test.py

from flask import Flask  apppp = Flask(__name__)@apppp.route("/")def sadfa():    return "Hello app2!"

4.运行并访问

运行uwsgi:uwsgi -s :9090 -M -p 4 --vhost --no-site启动nginx:service nginx start

-s 后为ip:port

并发4个线程:uwsgi -s :9090 -p 4
主控制线程+4个线程:uwsgi -s :9090 -M -p 4
执行超过30秒的client直接放弃:uwsgi -s :9090 -M -p 4 -t 30
限制内存空间128M:uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 
#--limit-as 这个参数好像有点问题,如果启动不了,日志显示“/operator.so: failed to map segment from shared object: Cannot allocate memory unable to load app 0” 的话,就把这个参数去掉
服务超过10000个req自动respawn:uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000
后台运行:uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log
--no-site: do not import site.py on startup
为了让多个站点共享一个uwsgi服务,必须把uwsgi运行成虚拟站点:uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost
还有 --uid 和 --chroot 两个参数自己参考其他资料使用

这样只用开一套uwsgi进程,就可以运行app1.mydomain.com和app2.mydomain.com两个域名下的两套程序。nginx根 据域名不同,发送不同的uwsgi参数给监听在9090端口上的uwsgi进程,uwsgi指定路径找到对应的程序,用指定的virtualenv,执行 指定的入口callble,将请求参数传入。

在uwsgi启动参数加上--pidfile=/tmp/project-master.pid

用kill发送重启信号,这样更新过的程序就能生效了:kill -TERM `cat /tmp/project-master.pid`
更多的信号参见:http://projects.unbit.it/uwsgi/wiki/uWSGISignals

欲了解详情,请参考以及、

转载于:https://my.oschina.net/lanybass/blog/61896

你可能感兴趣的文章
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>
机器学习实战_一个完整的程序(一)
查看>>
Web框架的常用架构模式(JavaScript语言)
查看>>