ITPub博客

首页 > Linux操作系统 > Linux操作系统 > uWSGI 虚拟主机模式

uWSGI 虚拟主机模式

原创 Linux操作系统 作者:nginx_web 时间:2012-06-07 20:09:44 0 删除 编辑

 

默认情况下,我们可以在同一个进程中使用不同的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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: uWSGI集群平台
下一篇: uwsgi协议的变量
请登录后发表评论 登录
全部评论

注册时间:2012-06-06

  • 博文量
    54
  • 访问量
    410407