技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類 >

在Linux系統(tǒng)上怎么通過(guò)uWSGI配置Nginx+Python環(huán)境

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-01-28 18:15┆點(diǎn)擊:

  1.安裝ubuntu有uwsgi的ppa:

  ?

1

2

3

 

add-apt-repository ppa:stevecrozz/ppa

apt-get update

apt-get install uwsgi

 

  2. 用uwsgi代替mod_wsgi

  Nginx 的整體配置這里不說(shuō)了,假設(shè)已經(jīng)明白 Nginx的基本配置,那么uwsgi就類似這么配置:

  ?

1

2

3

4

 

location / {

include uwsgi_params

uwsgi_pass 127.0.0.1:9090

}

 

  再比如django就是:

  ?

1

2

3

 

.......

from django.core.handlers.wsgi import WSGIHandler

application = WSGIHandler()

 

  然后運(yùn)行uwsgi監(jiān)聽(tīng)9090,其中-w后跟模塊名,也就是剛才配置的myapp

  ?

1

 

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è)線程:

  ?

1

 

uwsgi -s :9090 -w myapp -p 4

 

  主控制線程+4個(gè)線程:

  ?

1

 

uwsgi -s :9090 -w myapp -M -p 4

 

  執(zhí)行超過(guò)30秒的client直接放棄:

  ?

1

 

uwsgi -s :9090 -w myapp -M -p 4 -t 30

 

  限制內(nèi)存空間128M:

  ?

1

 

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128

 

  服務(wù)超過(guò)10000個(gè)req自動(dòng)respawn:

  ?

1

 

uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000

 

  后臺(tái)運(yùn)行等:

  ?

1

 

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”:

  ?

1

 

uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost

 

  然后必須配置virtualenv,virtualenv是Python的一個(gè)很有用的虛擬環(huán)境工具,這樣安裝:

  ?

1

2

 

apt-get install Python-setuptools

easy_install virtualenv

 

  然后設(shè)置一個(gè)/多個(gè)app基準(zhǔn)環(huán)境:

  ?

1

 

virtualenv /var/www/myenv

 

  應(yīng)用環(huán)境,在此環(huán)境下安裝的軟件僅在此環(huán)境下有效:

  ?

1

2

3

4

 

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。

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

 

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ù)了。