源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

详解使用Nginx和uWSGI配置Python的web项目的方法

  • 时间:2022-07-02 23:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解使用Nginx和uWSGI配置Python的web项目的方法
基于python的web项目,常见的部署方法有: [list] [*]      fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。[/*] [*]      wsgi:利用http服务的mod_wsgi模块来跑各个project。[/*] [/list] 不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快。uWSGI的主要特点如下: [list] [*]       超快的性能。[/*] [*]       低内存占用(实测为apache2的mod_wsgi的一半左右)。[/*] [*]       多app管理。[/*] [*]       详尽的日志功能(可以用来分析app性能和瓶颈)。[/*] [*]       高度可定制(内存大小限制,服务一定次数后重启等)。[/*] [/list] 环境ubuntu 12.04 IP:10.1.6.79 [b]安装nginx[/b]
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;
    }
}
[b]安装uwsgi[/b]
apt-get install uwsgi uwsgi-plugin-python
    如果你想安装所有的uwsgi插件,则可以安装uwsgi-plugin-all软件包 uwsgi配置/etc/uwsgi/apps-enabled/default.xml
<uwsgi>
  <plugin>python</plugin>
  <socket>127.0.0.1:9001</socket>
  <pythonpath>/var/www/example/app/</pythonpath>
  <app mountpoint="/">
    <script>wsgi_configuration_module</script>
  </app>
  <master/>
  <processes>4</processes>
  <reload-mercy>8</reload-mercy>
  <cpu-affinity>1</cpu-affinity>
  <max-requests>2000</max-requests>
  <limit-as>512</limit-as>
  <reload-on-as>256</reload-on-as>
  <reload-on-rss>192</reload-on-rss>
  <no-orphans/>
  <vacuum/>
</uwsgi>
    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]
[b]启动uwsgi[/b]
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
[b]启动nginx[/b]
/etc/init.d/nginx start
效果如下: [img]http://files.jb51.net/file_images/article/201512/20151221100655687.jpg?2015112110712[/img] [b]测试uwsgi是否可用 [/b]测试脚本test.py
#!/usr/bin/python
def application(env,start_response):
  start_response('200 OK',[('Content_Type','text/html')])
  return "Congraduation!!! uWSGI Testing OK!!!
#启动web server
uwsgi --http :9090 --wsgi-file test.py
浏览器输入IP:端口:192.168.1.99:9090 可以看到”Congraduation!!! uWSGI Testing OK!!!” [b]小结[/b] uwsgi 实际上也是一个 http 服务器,只不过它只面向 python 网络应用程序。虽然 uwsgi 也是 http 服务器,但是却不能直接使用它部署 python web 应用程序,否则会出错。 在本文中,uwsgi 所扮演的的角色是后端 http 服务器,nginx 扮演的角色是前端 http 服务器,hello.py 是客户端应用程序。 用户从网页浏览器中发出请求,nginx 服务器收到请求后,会通过它的 uwsgi 模块将用户的请求转发给 uwsgi 服务器,uwsgi 服务器处理完毕后将结果返回给 nginx,浏览器将最终的结果展现给用户。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部