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模組名字和可呼叫的應用。
動態新增應用程式正式的支援cherokee、nginx和cgi_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 -H|--virtualenv -H|--venv -H|--pyhome |
VirtualEnv是基於Py_SetPythonHome() C函式的使用。只有在Py_Initialize()之前呼叫這個函式才會有效,因此,動態新增應用使用該函式時是不可能的。所以,允許動態新增應用定義VirtualEnv是唯一的解決方法。首先,必須告訴python引擎不載入site模組。這個模組(在python初始化時自動載入)將會新增在sys.path,即所以所以站點包的目錄。
要模擬VirtualEnv,我們就不得不僅subinterpreter初始化之後在載入site模組。
跳過第一個import site,我們可以簡單的在動態應用載入上設定sys.prefix和sys.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; } |
靜態新增應用
我們可以使用uwsgi的entrypoint模組來定義虛擬主機:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 福音 虛擬主機
- 虛擬主機商如何搭建下一代虛擬主機
- Nginx虛擬主機配置Nginx
- VM NAT模式主機虛擬機器互聯注意事項模式虛擬機
- VMware僅主機模式虛擬機器無法ping通物理機模式虛擬機
- [php]apache虛擬主機配置PHPApache
- Nginx虛擬主機VirtualHost配置Nginx
- nginx虛擬主機實戰Nginx
- Linux虛擬主機與Windows虛擬主機之間有什麼區別LinuxWindows
- 主機ping不了虛擬機器虛擬機
- VMware虛擬機器如何設定使主機和虛擬機器不同IP虛擬機
- 虛擬機器之僅主機模式(HostOnly)連結外網設定虛擬機模式
- 007.Nginx虛擬主機Nginx
- 虛擬主機php.ini在哪PHP
- apache虛擬web主機構建ApacheWeb
- Nginx實戰(一) 虛擬主機Nginx
- nginx多個虛擬主機noinputfilespecifiedNginx
- 關於kangle虛擬主機系統與N點虛擬主機系統的比較
- 此主機不支援虛擬化實際模式的解決方法模式
- 【VIP】調整RAC虛擬IP地址(VIP)及虛擬主機名
- Apache 虛擬主機裡的 ServerName 指令ApacheServer
- Centos 7 構建虛擬Web主機CentOSWeb
- Ubuntu apache2配置虛擬主機UbuntuApache
- 用 Docker Machine 建立 Azure 虛擬主機DockerMac
- 虛擬主機上雲筆記(序言)筆記
- 一臺主機虛擬多個ip
- 美國雲主機與傳統虛擬主機的區別
- vmware虛擬機器與主機檔案共享虛擬機
- 虛擬機器如何和主機相互通訊虛擬機
- 虛擬機器入門二,虛擬機器的三種網路模式虛擬機模式
- (轉)【VIP】調整RAC虛擬IP地址(VIP)及虛擬主機名
- VM 虛擬機器linux從主機複製檔案到虛擬機器錯誤虛擬機Linux
- nat模式下解決虛擬機器無法ping通主機的問題模式虛擬機
- 香港雲主機:雲伺服器和雲虛擬主機的區別,雲伺服器真的就比虛擬主機好嗎?伺服器
- 如何檢視虛擬主機的php版本PHP
- 雲虛擬主機搭建Discuz論壇示例
- 虛擬主機支援哪些擴充套件功能套件
- 配置nginx多例項(不同於虛擬主機)Nginx