一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離

使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離

2020-08-17 11:22啃先生 Python

這篇文章主要介紹了使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離的部署實(shí)例,即靜態(tài)由Nginx處理而Python頁(yè)面由Django自帶的HTTP服務(wù)器處理,需要的朋友可以參考下

由于:

Django處理靜態(tài)文件不太友好;
以后有可能需要處理php或者其他資源的請(qǐng)求;

所以考慮結(jié)合nginx,使用nignx做它擅長(zhǎng)的路由分發(fā)功能;同時(shí)做動(dòng)靜分離,即Http請(qǐng)求統(tǒng)一由Nginx進(jìn)行分發(fā),靜態(tài)文件由Nginx處理,并返回給客戶端;而動(dòng)態(tài)的請(qǐng)求,則分發(fā)到uWsgi,由uWsgi再分發(fā)給Django進(jìn)行處理。即客戶端 <-> nginx <-> socket <-> uwsgi <-> Django

一、環(huán)境

系統(tǒng):centOS 6

  • python: 2.7(注意:Django要在2.7版本或以上的python來(lái) )
  • nginx
  • uswgi

所以,安裝前,先在控制臺(tái)輸入python —version查看當(dāng)前python的默認(rèn)版本,如果在2.7以下,則修改默認(rèn)版本。(詳見(jiàn)附錄)

二、安裝nginx、uWsgi

安裝

?
1
nginxsudo yum install nginx

安裝

?
1
pipsudo yum install python-pip

安裝

?
1
uWsgisudo pip uwsgi


三、測(cè)試nginx、uWsgi
1. 測(cè)試nginx啟動(dòng)測(cè)試nginx,看是否安裝成功啟動(dòng) sudo service nginx start然后在瀏覽器中,輸入ip地址,看是否出現(xiàn)nginx的歡迎頁(yè)面,出現(xiàn)則說(shuō)明安裝成功
2. 測(cè)試uWsgi在服務(wù)器上做任意目錄下(一般在home下的某一目錄),新建test.py,如下:

?
1
2
3
4
# test.pydef
application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

啟動(dòng)以Http方式訪問(wèn)的uWsgi,在test.py同一目錄下,輸入如下命令行(8001是監(jiān)聽(tīng)的端口,可以改成你想要的端口)

?
1
uwsgi --http :8001 --wsgi-file test.py

然后在瀏覽器中,輸入ip地址:8001,看是否響應(yīng)hello world,是則說(shuō)明安裝成功
P.S. 由于開(kāi)始時(shí),uwsgi的安裝使用了錯(cuò)誤的python版本,所以在我的服務(wù)器上,uwsgi正確地可執(zhí)行命令暫時(shí)是:/usr/src/download/uwsgi-2.0.10/uwsgi即完整的命令行是(本文所有的uwsgi命令同此):/usr/src/download/uwsgi-2.0.10/uwsgi --http :8001 --wsgi-file test.py
--http :8001 --wsgi-file test.py至此,uwsgi和nginx安裝成功。接下來(lái)把nginx、uwsgi、django關(guān)聯(lián)起來(lái)。在它們的協(xié)作之下,達(dá)到我們想要的目標(biāo)。

四、連接Django和uWsgi
如上uWsgi的測(cè)試那樣,uWsgi監(jiān)聽(tīng)8001端口,并把請(qǐng)求分發(fā)給test.py,python會(huì)執(zhí)行這個(gè)文件,如果我們把test.py分給Django的入口文件,那么就實(shí)現(xiàn)了Django和uWsgi的連接。所以,要做的事情有兩步:

在項(xiàng)目目錄下創(chuàng)建wsgi.py文件
啟動(dòng)uWsgi,使用它的wsgi-file指向wsgi.py

wsgi.py內(nèi)容如下:

?
1
2
3
4
5
6
7
8
9
"""
WSGI config for WHPAIWechat project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
 
import osfrom django.core.wsgi import
get_wsgi_applicationos.environ.setdefault("DJANGO_SETTINGS_MODULE", "WHPAIWechat.settings")
application = get_wsgi_application()

啟動(dòng)以Http方式訪問(wèn)uWsgiuwsgi --http :8000 --chdir /home/jiayandev/WHPAIWechat/ --wsgi-file WHPAIWechat/wsgi.py
瀏覽器訪問(wèn) ip地址:8000,加上必要的路由,即可訪問(wèn)之前寫(xiě)好的python程序:例如[http://112.74.73.31:8000/wechat/call]
P.S. 你是否關(guān)注到,啟動(dòng)uwsgi即可,而無(wú)需再啟動(dòng)Django了?

五、連接uWsgi和nginx
接下來(lái),打通 uWsgi和 nginx之間的連接,它們是通過(guò)socket來(lái)連接的。第四節(jié)所講的鏈接 swgi和Django,我們用瀏覽器訪問(wèn)是能得到正確的響應(yīng)的,說(shuō)明連接成功。那么只要在nginx上,實(shí)現(xiàn)某些規(guī)則下,把前端的請(qǐng)求轉(zhuǎn)發(fā)到此端口即可。要做的事情非常簡(jiǎn)單,即配置nginx的配置文件即可,一般在 /etc/nginx/conf.d/default.conf中。這里,我只設(shè)置幾條簡(jiǎn)單的規(guī)則

url包含.css、.js等服務(wù)器特定目錄,設(shè)置根目錄
以上都不匹配的的訪問(wèn)分發(fā)到uwsgi上的, nginx轉(zhuǎn)發(fā)給uswgi處理

更多規(guī)則可以視業(yè)務(wù)情況而定,完整的配置如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
upstream django {
  server 127.0.0.1:8000; # 注意8000是上述uwsgi監(jiān)聽(tīng)的端口
}
server {
  listen    80 default_server;
  server_name _;
 
  #charset koi8-r;
 
  #access_log logs/host.access.log main;
 
  # Load configuration files for the default server block.
  include /etc/nginx/default.d/*.conf;
 
  location = /404.html {
    root  /usr/share/nginx/html;
  }
 
  # redirect server error pages to the static page /50x.html
  #
  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /usr/share/nginx/html;
  }
 
  location ~ \.html$ {
        root /usr/share/nginx/html/front;
        index index.html index.htm;
  }
 
   location ~ \.(png|jpg|jpeg|css|img|js|flv|swf|download|eot|svg|ttf|woff|woff2|otf)$ {
        root /usr/share/nginx/html/front;
  }
 
 
  # 以上都不匹配的的訪問(wèn)分發(fā)到uwsgi上
  location / {
    include    /etc/nginx/uwsgi_params; #詳細(xì)看下文
    uwsgi_pass   django;
  }
 
  * # PHP分到 9000端口**
  #
  #location ~ \.php$ {
  #  root      html;
  #  fastcgi_pass  127.0.0.1:9000;
  #  fastcgi_index index.php;
  #  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  #  include    fastcgi_params;
  #}*
}

同時(shí),uswgi_param內(nèi)容如下,照抄即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uwsgi_param QUERY_STRING    $query_string;
uwsgi_param REQUEST_METHOD   $request_method;
uwsgi_param CONTENT_TYPE    $content_type;
uwsgi_param CONTENT_LENGTH   $content_length;
 
uwsgi_param REQUEST_URI    $request_uri;
uwsgi_param PATH_INFO     $document_uri;
uwsgi_param DOCUMENT_ROOT   $document_root;
uwsgi_param SERVER_PROTOCOL  $server_protocol;
 
uwsgi_param REMOTE_ADDR    $remote_addr;
uwsgi_param REMOTE_PORT    $remote_port;
uwsgi_param SERVER_PORT    $server_port;
uwsgi_param SERVER_NAME    $server_name;

配置完成后,重啟或者reload nginx配置即可生效
重啟:

?
1
sudo service nginx restart

reload:

?
1
sudo service nginx reload

然后直接訪問(wèn),看看有什么不一樣:
http://youIP/front/index.html
http://youIP/statics/index.html
http://youIP/(加上路由信息),例如 http://112.74.73.31/wechat/call
我們這里主要先關(guān)注訪問(wèn)django,如果http://112.74.73.31/wechat/call返回的信息跟第四節(jié)的一樣,說(shuō)明nginx和uwsgi也連接起來(lái)了,至此,nginx、uwsgi、django順利連接完成。

六、優(yōu)化uwsgi的啟動(dòng)
第三節(jié)、第四節(jié)介紹的啟動(dòng)uwsgi服務(wù)時(shí),我們都是使用命令行的方式啟動(dòng)和設(shè)置參數(shù)的,這樣不好記,有可能會(huì)忘記參數(shù) 等等。這里介紹另一種設(shè)置參數(shù)的方式,即用配置文件記錄uwsgi的參數(shù),啟動(dòng)時(shí),從配置文件里加載參數(shù)。參數(shù)如下

?
1
2
3
4
5
6
7
8
9
10
#WHPAIWechat_uwsgi.ini[uwsgi]
socket = 127.0.0.1:8000
chdir = /home/jiayandev/WHPAIWechat/
wsgi-file = WHPAIWechat/wsgi.py
processes = 4
threads = 2
master=True #設(shè)置此參數(shù),有一個(gè)主進(jìn)程
pidfile= pidfile/project-master.pid #主進(jìn)程id寫(xiě)入文件里
vacuum=True #退出時(shí),清理環(huán)境
daemonize = uwsgi.log #守護(hù)進(jìn)程的方式運(yùn)行,log日志存在此log文件里

啟動(dòng)uwsgi命令變成uwsgi WHPAIWechat_uwsgi.ini

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 五月天婷婷精品免费视频 | 亚洲精品久久久久久婷婷 | 8x在线永久成人影院 | 国产精品资源在线观看网站 | 国产三级精品91三级在专区 | 乌克兰肛交影视 | 日本暖暖视频在线观看 | 亚洲黄色三级视频 | 99精品国产久热在线观看66 | 天天草视频 | 国产午夜免费不卡精品理论片 | 国产精品成人麻豆专区 | 国产91一区二区在线播放不卡 | 欧美性理论片在线观看片免费 | japanese在线看| voyeur多毛厕所 | 午夜十八岁禁 | 午夜A级理论片左线播放 | 四虎影视免费观看免费观看 | 日韩毛片在线视频 | 免费看片黄色 | 亚洲高清一区二区三区四区 | 欧美特黄视频在线观看 | 亚洲国产精品成人久久 | 日本高清二三四本2021 | 亚洲精品www久久久久久 | 成人中文字幕在线观看 | 亚洲天堂成人在线 | 91亚洲精品国产自在现线 | 欧美成人乱弄视频 | 午夜性色一区二区三区不卡视频 | 欧美日韩国产成人综合在线影院 | 5g影院天天5g爽天天看 | 亚洲天堂三区 | 果冻传媒 天美 麻豆 | 婷婷在线成人免费观看搜索 | 欧美男男gaysgays | 亚洲天堂中文字幕 | 奇米影视在线观看 | h黑寡妇一级毛片 | 男生和女生搞逼逼 |