柚子快報邀請碼778899分享:運維 Nginx+uWSGI
柚子快報邀請碼778899分享:運維 Nginx+uWSGI
uWSGI
uWSGI是一個Wed服務(wù)器
主要用途是將Wed應(yīng)用程序部署到生產(chǎn)環(huán)境中
可以用來連接Nginx服務(wù)與Python動態(tài)網(wǎng)站
案例1:部署Python網(wǎng)站項目
1.1 問題
配置Nginx使其可以將動態(tài)訪問轉(zhuǎn)交給uWSGI:
1.2 方案
安裝Python工具及依賴
安裝uWSGI并編寫配置文件
1.3 步驟
實現(xiàn)此案例需要按照如下步驟進行。
步驟一:
首先$教學(xué)資料目錄/python拷貝到虛擬機
1)安裝python依賴軟件
[root@proxy ~]# yum -y install gcc make python3 python3-devel
#安裝gcc、make、python3、python3-devel四個包
2)安裝項目依賴
[root@proxy python]# pip3 install pytz-2022.6-py2.py3-none-any.whl
[root@proxy python]# pip3 install Django-1.11.8-py2.py3-none-any.whl
[root@proxy python]# pip3 install django-bootstrap3-11.0.0.tar.gz
3)測試項目
[root@proxy python]# tar -xf python-project-demo.tar.gz
[root@proxy python]# cd python-project-demo/
[root@proxy python-project-demo]# python3 manage.py runserver 0.0.0.0:8000
之后可在瀏覽器訪問192.168.99.5:8000,測試完畢后按ctrl + c
注意:測試時如果無法連接外網(wǎng),可能需要將python-project-demo/learning_logs/templates/base.html文件中的特效注釋
步驟二:
1)安裝uWSGI
[root@proxy python-project-demo]# cd ..
[root@proxy python]# pip3 install uWSGI-2.0.21.tar.gz
[root@proxy python]# vim myproject.ini
[uwsgi]
socket=127.0.0.1:8000 #與web服務(wù)(nginx)通信的接口
chdir=/root/python/python-project-demo #項目的工作目錄
wsgi-file=learning_log/wsgi.py #指定項目中的wsgi.py配置文件
daemonize=/var/log/uwsgi.log #指定日志文件位置
#processes=4 #指定啟動進程的數(shù)目
#master=true #開啟主進程管理模式
2)運行uWSGI
[root@proxy python]# uwsgi --ini myproject.ini #讀取myproject.ini運行uWSGI
3)修改nginx配置文件,添加uWSGI轉(zhuǎn)發(fā)
[root@proxy python]# vim /usr/local/nginx/conf/nginx.conf
...
location / {
uwsgi_pass 127.0.0.1:8000; #動態(tài)頁面交給uWSGI
include uwsgi_params; #調(diào)用uWSGI配置文件
root html;
index index.html index.htm;
}
...
[root@proxy python]# /usr/local/nginx/sbin/nginx
測試
使用瀏覽器訪問192.168.99.5
灰度發(fā)布
灰度發(fā)布是使用比較平穩(wěn)的過度方式升級或者替換產(chǎn)品項目的方法統(tǒng)稱
主要作用
及時發(fā)現(xiàn)項目問題盡早獲取用戶反饋信息,以改進產(chǎn)品如果項目產(chǎn)生問題,可以將問題影響控制到最小范圍
案例2:配置Nginx實現(xiàn)用IP測試灰度發(fā)布
2.1 問題
本案例要求不同IP的客戶訪問相同代理時,可以看到不同集群主機的內(nèi)容
2.2 方案
創(chuàng)建不同集群,準(zhǔn)備多臺集群主機,通過$remote_addr變量識別不同客戶機
2.3 步驟
實現(xiàn)此案例需要按照如下步驟進行。
步驟一:
1)使用proxy主機在nginx配置中創(chuàng)建集群
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
upstream s8001 { #測試集群1
server 192.168.99.100:8001;
}
upstream s8002 { #測試集群2
server 192.168.99.200:8002;
}
upstream default { #正常業(yè)務(wù)集群
server 192.168.99.100:80;
server 192.168.99.200:80;
}
server {
listen 80;
server_name localhost;
...
set $group "default"; #定義變量$group,默認(rèn)值default
if ($remote_addr ~ "192.168.99.1"){ #如果客戶機ip是99.1就訪問集群1
set $group s8001;
}
if ($remote_addr ~ "192.168.99.2"){ #如果客戶機ip是99.2就訪問集群1
set $group s8002;
}
location / {
proxy_pass http://$group; #調(diào)用集群
root html;
index index.html index.htm;
}
...
}
[root@proxy nginx]# sbin/nginx -s reload
為web1新建nginx虛擬主機
[root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 8001;
server_name localhost;
root html8001;
index index.html;
}
...
}
[root@proxy nginx]# sbin/nginx -s reload
[root@web1 nginx]# mkdir html8001
[root@web1 nginx]# echo web1-8001 > html8001/index.html
為web2新建nginx虛擬主機
[root@web2 nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
listen 8002;
server_name localhost;
root html8002;
index index.html;
}
...
}
[root@proxy nginx]# sbin/nginx -s reload
[root@web2 nginx]# mkdir html8002
[root@web2 nginx]# echo web1-8002 > html8002/index.html
2)測試
192.168.99.1訪問192.168.99.5
192.168.99.2訪問192.168.99.5
其他ip訪問192.168.99.5
案例3:通過不同用戶ID測試灰度發(fā)布
3.1 問題
不同ID的客戶訪問相同代理時,可以看到不同集群主機的內(nèi)容
3.2 方案
使用php頁面,定義不同匹配語句
3.3 步驟
實現(xiàn)此案例需要按照如下步驟進行。
步驟一:
1)使用proxy主機,要先還原nginx,并配置可以解析動態(tài)網(wǎng)頁
[root@proxy nginx]# vim html/home.php #修改php頁面,將原有Welcome那行修改成以下狀態(tài)
Welcome :
if(preg_match("/^abc/",$_SESSION['login_user'])) { #preg_match匹配正則,如果登錄賬號是以abc開頭,就連接99.100,否則連接99.200
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。