uWSGI 虚拟主机模式

 

默认情况下,我们可以在同一个进程中使用不同的SCRIPT_NAME变量或者是uwsgi协议描述符来运行多个应用。

 

    0.9.6版本开始,我们可以使用SERVER_NAME变量来载入多个应用了。

 

    这就是虚拟主机模式,通过在命令行中简单的添加--vhost选项来启用该模式(当然也可以在配置文件或者是环境变量中添加同效的选项来实现虚拟主机模式)。例如:

 

./uwsgi -s :3031 -M -p 4 --vhost

   

动态添加的应用

 

uWSGI服务器动态添加应用,在没有配置文件的情况下启动uWSGI服务器,可以在uwsgi中使用变量,从而载入新的应用。例如:

 

UWSGI_SCRIPT

   

    通过这个变量我们能够传递一个wsgi脚本文件名,在脚本中定义了一个可载入的应用。

 

或者

 

UWSGI_MODULE UWSGI_CALLABLE

   

    即添加wsgi模块名字和可调用的应用。

 

    动态添加应用程序正式的支持cherokeenginxcgi_dynamic,并且也很容易的添加到tomcat twisted处理程序。

 

    我们可以为动态添加应用使用虚拟主机,例如:

 

server {

        listen       8080;

        server_name  localhost;

        location / {

                uwsgi_pass 192.168.173.5:3031;

                include uwsgi_params;

                uwsgi_param UWSGI_SCRIPT mymako;

                uwsgi_param UWSGI_PYHOME /Users/roberto/uwsgi/VENV1;

        }

    }

 

    server {

        listen       8080;

        server_name  mrspurr.local;

        location / {

                uwsgi_pass 192.168.173.5:3031;

                include uwsgi_params;

                uwsgi_param UWSGI_SCRIPT. mytrac;

                uwsgi_param UWSGI_PYHOME /Users/roberto/uwsgi/VENV2;

        }

 

        location /arm {

                uwsgi_pass 192.168.173.14:3031;

                include uwsgi_params;

        }

    }

 

   

 当我们想使用VirtualEnv的时候,需要为uWSGI服务器添加--no-site选项:

   

./uwsgi -s :3031 -M -p 4 --vhost --no-site

 

为动态添加应用定义VirtualEnv

 

uWSGI使用virtualenv的快速设置:

 

第一步、创建 virtualenv:

 

$ virtualenv myenv

New python executable in myenv/bin/python

Installing setuptools...............done.

 

第二步、安装所有所需的模块,例如pylons

 

 * ./myenv/bin/easy_install pylons

 

第三步、拷贝wsgi模块到这个新的环境(如果不想修改PYTHONPATH,那么在lib/python2.x)

 

 

在启动uWSGI服务器时使用-H选项,例如:

 

$ ./uwsgi26 -H myenv -s 127.0.0.1:3031 -M -w envapp

*** Starting uWSGI on [Thu Dec 17 11:07:00 2009] ***

your process address space limit is 4294967295 bytes (4095 MB)

Setting PythonHome to myenv...

binding on TCP port: 3031

............

 

    这里的-H表示:

 

    -H|--home                 设置pythonhome目录/虚拟目录

    -H|--virtualenv           设置pythonhome目录/虚拟目录

    -H|--venv                 设置pythonhome目录/虚拟目录

    -H|--pyhome               设置pythonhome目录/虚拟目录

   

 

VirtualEnv是基于Py_SetPythonHome() C函数的使用。只有在Py_Initialize()之前调用这个函数才会有效,因此,动态添加应用使用该函数时是不可能的。所以,允许动态添加应用定义VirtualEnv是唯一的解决方法。首先,必须告诉python引擎不载入site模块。这个模块(python初始化时自动载入)将会添加在sys.path,即所以所以站点包的目录。

 

要模拟VirtualEnv,我们就不得不仅subinterpreter初始化之后在载入site模块。

 

跳过第一个import site,我们可以简单的在动态应用载入上设置sys.prefixsys.exec_prefix并且调用:

 

PyImport_ImportModule("site");

   

有些用户想不禁用初始化site模块载入,因此site模块必须被重新载入:

 

PyImport_ReloadModule(site_module);

   

   现在我们可以动态使用UWSGI_PYHOME变量简单的设置VirtualEnv

 

location / {

       uwsgi_pass 192.168.173.5:3031;

       include uwsgi_params;

       uwsgi_param UWSGI_SCRIPT. mytrac;

       uwsgi_param UWSGI_PYHOME /Users/roberto/uwsgi/VENV2;

}

  

静态添加应用

 

我们可以使用uwsgientrypoint模块来定义虚拟主机:

 

import uwsgi

 

def app1(env, start_response):

    ...

 

def app2(env, start_response):

    ...

 

uwsgi.applications = {'unbit.it|': app1, 'localhost|/ciao': app2}

 

   

 

 

    在添加静态应用中,配置语法与在配置文件中SCRIPT_NAME的配置一样,然后不同的是必须添加域名部分,也就是将域名部分添加到词典key中,注意上面配置中的最后一句,可以看到的是在域名部分和SCRIPT_NAME部分通过管道符“|”隔开。

 

 

   

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27043155/viewspace-732189/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27043155/viewspace-732189/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值