在Linux系統(tǒng)上通過(guò)uWSGI配置Nginx+Python環(huán)境的教程
1.安裝ubuntu有uwsgi的ppa:
add-apt-repository ppa:stevecrozz/ppa apt-get update apt-get install uwsgi
2. 用uwsgi代替mod_wsgi
Nginx 的整體配置這里不說(shuō)了,假設(shè)已經(jīng)明白 Nginx的基本配置,那么uwsgi就類似這么配置:
location / {
include uwsgi_params
uwsgi_pass 127.0.0.1:9090
}
再比如django就是:
....... from django.core.handlers.wsgi import WSGIHandler application = WSGIHandler()
然后運(yùn)行uwsgi監(jiān)聽(tīng)9090,其中-w后跟模塊名,也就是剛才配置的myapp
uwsgi -s :9090 -w myapp
運(yùn)行網(wǎng)站發(fā)現(xiàn)已經(jīng)部署完成了。
3.uwsgi的參數(shù)
以上是單個(gè)project的最簡(jiǎn)單化部署,uwsgi還是有很多令人稱贊的功能的,例如:
并發(fā)4個(gè)線程:
uwsgi -s :9090 -w myapp -p 4
主控制線程+4個(gè)線程:
uwsgi -s :9090 -w myapp -M -p 4
執(zhí)行超過(guò)30秒的client直接放棄:
uwsgi -s :9090 -w myapp -M -p 4 -t 30
限制內(nèi)存空間128M:
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128
服務(wù)超過(guò)10000個(gè)req自動(dòng)respawn:
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000
后臺(tái)運(yùn)行等:
uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log
4.為uwsgi配置多個(gè)站點(diǎn)
為了讓多個(gè)站點(diǎn)共享一個(gè)uwsgi服務(wù),必須把uwsgi運(yùn)行成虛擬站點(diǎn):去掉“-w myapp”加上”–vhost”:
uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost
然后必須配置virtualenv,virtualenv是Python的一個(gè)很有用的虛擬環(huán)境工具,這樣安裝:
apt-get install Python-setuptools easy_install virtualenv
然后設(shè)置一個(gè)/多個(gè)app基準(zhǔn)環(huán)境:
virtualenv /var/www/myenv
應(yīng)用環(huán)境,在此環(huán)境下安裝的軟件僅在此環(huán)境下有效:
source /var/www/myenv/bin/activate pip install django pip install mako ...
最后配置nginx,注意每個(gè)站點(diǎn)必須單獨(dú)占用一個(gè)server,同一server不同location定向到不同的應(yīng)用不知為何總是失敗,估計(jì)也 算是一個(gè)bug。
server {
listen 80;
server_name app1.mydomain.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_PYHOME /var/www/myenv;
uwsgi_param UWSGI_SCRIPT myapp1;
uwsgi_param UWSGI_CHDIR /var/www/myappdir1;
}
}
server {
listen 80;
server_name app2.mydomain.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_PYHOME /var/www/myenv;
uwsgi_param UWSGI_SCRIPT myapp2;
uwsgi_param UWSGI_CHDIR /var/www/myappdir2;
}
}
這樣,重啟nginx服務(wù),兩個(gè)站點(diǎn)就可以共用一個(gè)uwsgi服務(wù)了。
相關(guān)文章
OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼
本文主要介紹了OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
使用Python實(shí)現(xiàn)博客上進(jìn)行自動(dòng)翻頁(yè)
這篇文章主要介紹了使用Python實(shí)現(xiàn)博客上進(jìn)行自動(dòng)翻頁(yè),需要的朋友可以參考下2017-08-08
詳解pycharm自動(dòng)import所需的庫(kù)的操作方法
這篇文章主要介紹了pycharm自動(dòng)import所需的庫(kù)的操作方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Python中DataFrame判斷兩列數(shù)據(jù)是否相等的方法
本文主要介紹了DataFrame判斷兩列數(shù)據(jù)是否相等的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決
這篇文章主要介紹了Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python使用pyshark庫(kù)捕獲數(shù)據(jù)包的示例詳解
PyShark是一個(gè)基于Python的網(wǎng)絡(luò)數(shù)據(jù)包分析工具庫(kù),它允許用戶捕獲、解碼和分析實(shí)時(shí)網(wǎng)絡(luò)流量,特別是Wi-Fi和TCP/IP協(xié)議的數(shù)據(jù),所以本文給大家介紹了python使用pyshark庫(kù)捕獲數(shù)據(jù)包的示例,需要的朋友可以參考下2024-08-08
如何在Django中添加沒(méi)有微秒的 DateTimeField 屬性詳解
這篇文章主要給大家介紹了關(guān)于如何在Django中添加沒(méi)有微秒的 DateTimeField 屬性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

