nginx + uwsgi部署


1 總體業務流程

1.1 總體概述

1.1.1 web容器
  • web容器是幫助我們部署java、php、python、vue等項目的
  • web容器是幫助django服務端處理客戶端連接,官方號稱可以處理10萬(實現高並發)
  • web容器是幫助處理靜態資源請求(html、css、JS),返回給客戶端瀏覽器(django等web服務器處理靜態資源能力差)
1.1.2 常見web容器
  • nginx(python、php)
    • LNMP
      • L:LInux
      • N:Nginx
      • M:MySQL
      • P: php
  • apache(PHP)
    • LAMP
      • L:LInux
      • A:Apache
      • M:MySQL
      • P: php
  • Tomcat(JAVE)
1.1.3 WSGI
WSGI是一種 python專用 的web協議 和http類似
WSGI實質:WSGI是一種描述web服務器(如 nginx,uWSGI web服務器 )如何與 web框架 (如用
Django、Flask框架寫的程序)通信的規范、協議
WSGI定義了使用 python編寫的web app(django)與web server(uWSGI)之間接口格式

* 為什么需要web協議:
1)不同的框架有不同的開發方式,但是無論如何,開發出的 應用程序(django)都要和服務器 (nginx)程序配合 ,才能為用戶提供服務。
2) 這樣, 服務器程序(nginx) 就需要為不同的框架提供不同的支持,只有支持它的服務器才能被開發出的應用使用,顯然這是不可行的。
3)web協議本質:就是定義了 Web服務器和Web應用程序或框架之間的一種簡單而通用的接口規范。
1.1.4 uWSGI
什么是uWSGI: uWSGI是一個全功能的HTTP服務器,實現了WSGI協議 、uwsgi協議 、http協議等。
uWSGI作用:它要做的就是把HTTP協議轉化成語言支持的網絡協議,比如把HTTP協議轉化成WSGI協議,讓Python可以直接使用。uWSGI特點:輕量級,易部署,性能比nginx差很多,支持多種協議
1.1.5 Nginx
Nginx是一個Web服務器,其中的HTTP服務器功能和 uWSGI功能很類似
但是Nginx還可以用作更多用途,比如最常用的 反向代理、負載均衡、攔截攻擊等,而且性能極高
單台nginx號稱可以處理10萬並發
1.1.6 Django
Django是一個Web框架,框架的作用在於處理request和 reponse,其他的不是框架所關心的內容。
所以如何部署Django不是Django所需要關心的。

1.2 nginx+uwsgi+django部署各模塊作用

1.3 Django + Uwsgi + Nginx方案

1.請求處理整體流程:
nginx接收到瀏覽器發送過來的http請求,將包進行解析,分析url
* 靜態文件請求:就直接訪問用戶給nginx配置的靜態文件目錄(html/css/js/圖片),直接返回用戶請求的靜態文件。
* 動態接口請求: 那么nginx就將請求轉發給uWSGI,最后到達django處理
2.各模塊作用。
nginx:是對外的服務器,外部瀏覽器通過url訪問nginx,nginx主要處理靜態請求(html/css/js/圖片) 
uWSGI:是對內的服務器,主要用來 處理動態請求 。(從mysql、redis、es等中動態查詢到的
數據)。
uwsgi:是一種web協議,接收到請求之后將包進行處理,處理成wsgi可以接受的格式,並發給wsgi。
wsgi:是python專用的web協議,根據請求調用應用程序(django)的某個文件,某個文件的某個函數。
django:是真正干活的,查詢數據等資源,把處理的結果再次返回給WSGI, WSGI將返回值進行打包,打包成uwsgi能夠接收的格式。
uwsgi:接收wsgi發送的請求,並轉發給nginx,nginx最終將返回值返回給瀏覽器。

1.4 Django + uWSGI方案特點

沒有nginx而只有uwsgi的服務器,則是Internet請求直接由uwsgi處理,並反饋到web項目中。
nginx可以實現安全過濾,防DDOS等保護安全的操作,並且如果配置了多台服務器,nginx可以保證服務器的負載相對均衡。
而uwsgi則是一個web服務器,實現了WSGI協議(Web Server Gateway Interface),http協議等,它可以接收和處理請求,發出響應等。所以只用uwsgi也是可以的。

1.5 nginx和uWSGI特點

1.5.1 nginx的作用
反向代理,可以攔截一些web攻擊,保護后端的web服務器
負載均衡,根據輪詢算法,分配請求到多節點web服務器
緩存靜態資源,加快訪問速度,釋放web服務器的內存占用,專項專用
1.5.2 uWSGI的適用
單節點服務器的簡易部署
輕量級,好部署

2 后端部署

2.1 Django的settings配置

# 正式上線關閉調試模式, 不會暴露服務器信息
DEBUG = True
# 允許的主機
ALLOWED_HOSTS = ['*']
# 靜態資源收集位置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 命令行執行
python manage.py collectstatic

2.2 關於 uwsgi

2.2.1 安裝uwsgi
workon syl
pip3 install uwsgi 		# 安裝uwsgi 
whereis uwsgi 			# 查看uwsgi安裝路徑
2.2.2 uwsgi_conf中寫入uwsgi.ini
# vim /root/shiyanlou_project/uwsgi_conf/uwsgi.ini
# vim中,A鍵進入插入模式,ESC退出,:wq保存並退出
# 或者pycharm中直接粘貼也可以
[uwsgi] 
# 使用Nginx連接時使用,Django程序所在服務器地址和端口號 
socket=127.0.0.1:8000 
# 項目目錄絕對路徑 
chdir=/root/shiyanlou_project/syl 
# 項目中wsgi.py文件的目錄,相對於項目目錄 
wsgi-file=syl/wsgi.py 
# 進程數(機器核數的1倍) 
processes=4 
# 線程數 
threads=20 
# uwsgi服務器的角色 
master=True 
# 存放進程編號的文件 
pidfile=uwsgi.pid 
# 日志文件 
daemonize=uwsgi.log 
# 指定依賴的虛擬環境 
virtualenv=/root/.virtualenvs/syl
2.2.3 用uwsgi啟動django
# 一定要在項目目錄里面
uwsgi --http 192.168.56.100:6666 --file syl/wsgi.py --static-map=/static=static
# 訪問項目 訪問項目:http://192.168.56.11 (只是測試)

2.3 關於nginx

2.3.1 安裝nginx
sudo apt update 	# 更新ap
sudo apt install nginx # 安裝nginx [root@linux-node1 /]# sudo systemctl status nginx # 查看nginx狀態
2.3.2 配置nginx+uwsgi啟動
# etc/nginx/conf.d/django.conf 
server {
        listen 8888;
        server_name 192.168.56.100;
                location /static {
                        alias /root/shiyanlou_project/syl/static;
                }

                location / {
                        include uwsgi_params;
                        uwsgi_pass 127.0.0.1:8000;
                        uwsgi_ignore_client_abort on;
                }
}
2.3.3 解讀
user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 
include /etc/nginx/modules-enabled/*.conf; 

events { 
    worker_connections 768; 		# 鏈接數量 
}

http {
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    access_log /var/log/nginx/access.log; 
    # 客戶瀏覽器訪問nginx服務記錄(客戶 戶端訪問異常時可以查看) 
    error_log /var/log/nginx/error.log; 
    # nginx錯誤日志(nginx啟動時報錯的 日志)
    include /etc/nginx/conf.d/*.conf; 
    # nginx擴展配置文件件 
    include /etc/nginx/sites-enabled/*; 
}

2.4 uwsgi和nginx操作日志

2.4.1 啟動並查看nginx日志
systemctl restart nginx 
# 開啟nginx 

tail -f /var/log/nginx/access.log 
# 查看nginx接入日志 

tail -f /var/log/nginx/error.log 
# 查看nginx錯誤日志 
2.4.2 啟動並查看uwsgi日志
cd /root/shiyanlou_project/uwsgi_conf 
# 進入實驗樓目錄 

uwsgi --ini uwsgi.ini 
# 啟動uwsgi的 django項目 
# http://192.168.56.11:8888/ 訪問項目 

uwsgi --stop uwsgi.pid 
# 關閉uwsgi

tail -f uwsgi.log 
# 查看uwsgi日志


免責聲明!

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



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