前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uwsgi php,Nginx+uWSGI[通俗易懂]

uwsgi php,Nginx+uWSGI[通俗易懂]

作者头像
全栈程序员站长
发布2022-10-01 14:25:08
4600
发布2022-10-01 14:25:08
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

基于python的web项目,常见的部署方法有:

fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。

wsgi:利用http服务的mod_wsgi模块来跑各个project。

不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快。uWSGI的主要特点如下:

超快的性能。

低内存占用(实测为apache2的mod_wsgi的一半左右)。

多app管理。

详尽的日志功能(可以用来分析app性能和瓶颈)。

高度可定制(内存大小限制,服务一定次数后重启等)。

环境ubuntu 12.04 IP:10.1.6.79

安装nginx

apt-get install nginx-full nginx-common

nginx配置/etc/nginx/sites-enabled/example

server {

listen 80;

server_name 10.1.6.79;

access_log /var/log/nginx/example_access.log;

error_log /var/log/nginx/example_error.log;

root /var/www/example;

location / {

uwsgi_pass 127.0.0.1:9001;

include uwsgi_params;

uwsgi_param UWSGI_SCHEME $scheme;

uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;

}

}

安装uwsgi

apt-get install uwsgi uwsgi-plugin-python

如果你想安装所有的uwsgi插件,则可以安装uwsgi-plugin-all软件包

uwsgi配置/etc/uwsgi/apps-enabled/default.xml

python

127.0.0.1:9001

/var/www/example/app/

4

8

1

2000

512

256

192

uwsgi配置文件中的参数也可以在命令行通过uwsgi指定,配置文件除了xml格式外,还可以写成ini格式的,软件包安装完毕后在/usr/share/doc/uwsgi/examples/conffile目录下会有一些xml和ini格式配置文件的例子。

wsgi_configuration_module.py脚本内容

#!/usr/bin/python

import os

import sys

sys.path.append(‘/var/www/example/app’)

os.environ[‘PYTHON_EGG_CACHE’] = ‘/var/www/example/.python-egg’

def application(environ, start_response):

status = ‘200 OK’

output = ‘Hello World!’

response_headers = [(‘Content-type’, ‘text/plain’),

(‘Content-Length’, str(len(output)))]

start_response(status, response_headers)

return [output]

启动uwsgi

uwsgi -x /etc/uwsgi/apps-enabled/default.xml –daemonize /var/log/uwsgi/app/default.log

uwsgi 的参数:

-M 开启Master进程

-p 4 开启4个进程

-s 使用的端口或者socket地址

-d 使用daemon的方式运行, 注意, 使用-d后, 需要加上log文件地址, 比如-d /var/log/uwsgi.log

-R 10000 开启10000个进程后, 自动respawn下

-t 30 设置30s的超时时间, 超时后, 自动放弃该链接

–limit-as 32 将进程的总内存量控制在32M

-x 使用配置文件模式

并发4个线程

uwsgi -s :9090 -w myapp -p 4

主控制线程+4个线程

uwsgi -s :9090 -w myapp -M -p 4

执行超过30秒的client直接放弃

uwsgi -s :9090 -w myapp -M -p 4 -t 30

限制内存空间128M

uwsgi -s :9090 -w myapp -M -p 4 -t 30 –limit-as 128

服务超过10000个req自动respawn

uwsgi -s :9090 -w myapp -M -p 4 -t 30 –limit-as 128 -R 10000

后台运行等

uwsgi -s :9090 -w myapp -M -p 4 -t 30 –limit-as 128 -R 10000 -d uwsgi.log

除了直接用uwsgi命令启动外,还可以用init.d下的脚本启动, 不过需先修 改/etc/default/u wsgi中默认配置文件的路径,然后通过/etc/init.d/uwsgi start启动

#INHERITED_CONFIG=/usr/share/uwsgi/conf/default.ini

INHERITED_CONFIG=/etc/uwsgi/apps-enabled/default.xml

启动nginx

/etc/init.d/nginx start

效果如下:

f8e8aa534e5ef5103cb9edea3b9f56cd.png
f8e8aa534e5ef5103cb9edea3b9f56cd.png

python在国内用来做web还不多,虽然python也有一些web框架,不过目前来看文档缺失、本身系统的稳定都还没经过量和时间的考验,要像PHP那样大规模的火起来还需一段时间。

nginx配置参考:http://wiki.nginx.org/HttpUwsgiModule#uwsgi_param

uwsgi安装参考:http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html

uwsgi配置参考:http://uwsgi-docs.readthedocs.org/en/latest/Options.html#vacuum

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194823.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月11日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档