Nginx如何實現"處理動態請求"?


概念介紹
 
Django
  • 定義
    • python寫的Web應用程序框架
  • 使用它可以快速開發
    • web應用程序
    • 開發網站
      • 優點: 高效(如自帶注冊登陸模塊等)
 
uWSGI
  • 定義
    • 是web服務器
    • 是實現了uwsgi和WSGI兩種協議的Web服務器
  • 其他
    • WSGI是一種通信協議
    • uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信
 
8000端口
 
 
Nginx是如何處理動態請求?
         簡單來說:  通過Nginx+uWSGI+Django組合(框架)
 
        答: 首先Nginx服務是不能處理動態請求的;當用戶發起http請求,請求會被Nginx處理,如果是靜態資源請求Nginx從磁盤中找見文件則直接傳給客戶端,如果是動態請求Nginx則通過uwsgi協議轉發到uWSGI服務器,uWSGi再去調python寫web應用程序,處理的結果先給uWSGI服務器,再通過uwsgi協議轉發到Nginx服務器
        這個過程中: Nginx服務器相當於動態文件/動態請求的代理者
        Nginx服務器不支持wsgi協議,無法直接調用python用語言開發的webApp;而uWSGI服務器支持wsgi協議
  • 靜態請求:請求的內容是靜態文件就是靜態請求
    • 靜態文件:文件上傳到服務器,不會被修改,也就是永遠不會改變的文件
    • html就是一個標准的靜態文件
  • 動態請求:請求的內容是動態的(如每個人訪問京東后加入購物車的內容都不一樣)
    • 動態資源: 服務器上沒該資源, 通過數據庫或者其他服務處理后的數據
 
參考理解
uWSGI 來部署 Django 程序(如何把uwsgi與Django連接起來)
        你就可以在瀏覽器中訪問你的Django程序了。所有的請求都是經過uwsgi傳遞給Django程序;
 
 
部署以實現"Nginx處理動態請求"
 
 
概要
 
1、創建用戶
2、安裝依賴軟件(起碼Django軟件需要)
3、安裝Django和uwsgi(不要一起裝,會出問題)
4、創建Django服務 
5、部署並啟動uWSGI服務
6、用Nginx將TCP服務轉換成http服務(將uwsgi與Nginx連接)
 
 
詳細
 
1、創建用戶
[root@web01 opt]# groupadd django -g 888
[root@web01 opt]# useradd django -u 888 -g 888 -r -M -s /bin/sh
 
2、安裝依賴軟件(起碼Django軟件需要)
[root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y
 
3、安裝Django和uwsgi(不要一起裝,會出問題)
[root@web01 opt]# pip3 install django
[root@web01 opt]# pip3 install uwsgi
 
 
4、創建Django服務 
4-1 創建項目(本例中叫Linux項目)
[root@web01 opt]# cd /opt
[root@web01 opt]# django-admin startproject linux
注:  /opt/linux 是項目目錄,其實就是 網站的根目錄
4-2
[root@web01 opt]# cd linux
[root@web01 opt]# django-admin startapp app01
4-3
更改項目配置文件
[root@web01 linux]# vim linux/settings.py
更改內容
ALLOWED_HOSTS = ['*']
DATABASES = {}
更改1
更改2
4-4
# Django服務測試
4-4-1
[root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000
4-4-2
# 在瀏覽器輸入  http://主機ip:8000/
出現正常頁面表示DJango服務正常啟動
 
5、部署並啟動uWSGI服務
 
緣由
python問題: 多線程性能差; 短時間遇到大流量,服務的承載能力不強
為了DJango的穩定性所以提供了uWSGI服務
    - uWSGI:  用C語言開發,是所有語言中最快的一種語言
操作
啟動uWSGI服務后,不需要啟動4-4-1的# python3 manage.py runserver 0.0.0.0:8000服務,uWSGI直接調python寫的代碼
 
 
 
5-1編輯項目配置文件
[root@localhost ~]# vim /opt/linux/myweb_uwsgi.ini
注:  配置文件建在網站根目錄下 :  /opt/linux 是項目目錄,其實就是 網站的根目錄
配置內容
[uwsgi]
# 端口號
socket            = :8000
# 指定項目的目錄
chdir           = /opt/linux
# wsgi文件路徑
wsgi-file       = linux/wsgi.py
# 模塊wsgi路徑
module          = linux.wsgi
# 是否開啟master進程
master          = true
# 工作進程的最大數目
processes       = 4
# 結束后是否清理文件
vacuum          = true
 
# wsgi文件路徑
wsgi-file       = linux/wsgi.py 這里是相對路徑
其他
# master進程是監控worker進程的
# 工作進程即worker進程最大數目(一般4或5個夠了)
最后出現
 
5-2 啟動uWSGI
[root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666
注: 在這之前需要創建uid是666的用戶(已有請忽略)
參數
-d       : 以守護進程方式運行(后台運行)
--ini : 指定配置文件路徑
--uid : 指定uid
 
5-3訪問(輸入ip及端口)
 
 
6、 用Nginx將TCP服務轉換成http服務(將uwsgi與Nginx連接)
      請求先給Nginx,Nginx則通過uwsgi協議轉發到uWSGI服務器
        
 
6-1 編輯Nginx配置文件
配置內容部分解釋
uwsgi_pass 127.0.0.1:8000;  8000是是 項目配置文件中的"端口號"
uwsgi_param UWSGI_SCRIPT linux.wsgi; linux.wsgi 是 項目配置文件中的"模塊wsgi路徑"
uwsgi_param UWSGI_CHDIR /opt/linux; /opt/linux 是 項目配置文件中的"項目目錄"
網絡轉發到xxx協議(轉發到http協議server非本配置內容,僅為參考理解)
6-2 測試語法格式
nginx -t
6-3 解析域名(Nginx配置文件中)
填寫路徑  C:\Windows\System32\drivers\etc
填寫內容: ip 域名
6-4 重啟Nginx(為重載Nginx配置文件)
systemctl restart nginx
 
6-5 訪問網站
可以訪問(僅啟uWSGI服務,無啟動python)
 
 
 
補充:
在本部署中
fastcgi_params 給php用
scgi_params 給java用
v2_params 給Go用
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM