Nginx 概述
不依賴(lài)第三方服務(wù)搭建網(wǎng)站服務(wù)器及功能
Nginx 作為反向代理器
Nginx不直接處理請(qǐng)求遮晚,而是在云主機(jī)中有一個(gè)Real Server橡疼,Nginx只是把請(qǐng)求轉(zhuǎn)發(fā)給Real Server胚鸯,等待Real Server請(qǐng)求處理完成后,再將請(qǐng)求返回給客戶(hù)端
Nginx 作為負(fù)載均衡器
在環(huán)境中存在 Nginx, Real Server No.1, Real Server No.2......
Nginx一樣執(zhí)行請(qǐng)發(fā)轉(zhuǎn)發(fā)稼稿,但是在 Nginx 挑選 Real Server 的時(shí)候抖单,權(quán)重是不一樣的,Nginx 中自己的一套邏輯勒极,這套邏輯就是為了負(fù)載均衡
假設(shè):Real Server No.1 的權(quán)重是3是掰,Real Server No.2 的權(quán)重是1,在4個(gè)請(qǐng)求過(guò)來(lái)后辱匿,很可能 Real Server No.1 會(huì)收到3個(gè)請(qǐng)求键痛,Real Server No.2會(huì)收到一個(gè)請(qǐng)求
CentOS && Nginx
安裝 Nginx
yum install nginx
Nginx 常用指令
1.啟動(dòng)Nginx
sudo nginx
判斷是否啟動(dòng)成功
在瀏覽器中輸入公網(wǎng)的IP,出現(xiàn)如下的頁(yè)面則為啟動(dòng)成功
2.停止Nginx
快速停止Nginx
sudo nginx -s stop
3.退出Nginx
與上面的 stop 相比會(huì)更加優(yōu)雅一下
sudo nginx -s quit
4.重新加載Nginx的配置文件
在修改完配置后執(zhí)行該命令
sudo nginx -s reload
5.重新打開(kāi)Nginx的日志文件
sudo nginx -s reopen
修改Nginx的配置文件
文件存放的位置
cd /etc/nginx/
主配置文件:nginx.conf
Nginx關(guān)鍵配置模塊
- events 配置域:網(wǎng)絡(luò)連接相關(guān)配置(I/O模型等)
- server 配置域:相關(guān)服務(wù)節(jié)點(diǎn)配置
- location 配置域:資源路由配置
- http 配置域:Nginx作為網(wǎng)頁(yè)服務(wù)器時(shí)的配置(#mail)
- upstream 配置域:反向代理配置域
配置存在層級(jí)關(guān)系
# nginx.conf 五大配置域相關(guān)層次關(guān)系
events {
...
}
http {
...
upstream {
...
}
server {
...
location {
...
}
}
}
# mail {
# ...
# }
WSGI 協(xié)議概述
全稱(chēng):Web Server Gateway Interface
是 Web Server 和 Web Application 通信的規(guī)范
uWSGI概述
- 實(shí)現(xiàn)了WSGI協(xié)議
- Web服務(wù)器
- 接收客戶(hù)端請(qǐng)求通過(guò)協(xié)議傳達(dá)給Django應(yīng)用
centOS 中安裝 python3.7
1.查找python的位置:
whereis python
2.安裝相關(guān)包匾七,用于下載編譯python3
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
3.默認(rèn)的絮短,centos7也沒(méi)有安裝pip
#運(yùn)行這個(gè)命令添加epel擴(kuò)展源
yum -y install epel-release
#安裝pip
yum install python-pip
4.用pip裝wget
pip install wget
5.用wget下載python3的源碼包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
6.手動(dòng)安裝
#解壓
xz -d Python-3.7.0.tar.xz
tar -xf Python-3.7.0.tar
#進(jìn)入解壓后的目錄,依次執(zhí)行下面命令進(jìn)行手動(dòng)編譯
./configure prefix=/usr/local/python3
make && make install
7.添加軟鏈接
#將原來(lái)的鏈接備份
mv /usr/bin/python /usr/bin/python.bak
#添加python3的軟鏈接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python
#測(cè)試是否安裝成功了
python -V
8.更改yum配置昨忆,因?yàn)槠湟玫絧ython2才能執(zhí)行丁频,否則會(huì)導(dǎo)致yum不能正常使用
vi /usr/bin/yum
# 把 #! /usr/bin/python修改為#! /usr/bin/python2
vi /usr/libexec/urlgrabber-ext-down
# 把 #! /usr/bin/python 修改為#! /usr/bin/python2
9.修改pip的python版本
原先的pip文件是以python2為默認(rèn)版本
查找pip的位置
whereis pip => /usr/bin/pip # 這里面會(huì)有很多其他的pip,比如pip2,pip3,pip3.6等
vim /usr/bin/pip
#!/usr/bin/python2 ==> #!/usr/bin/python3
centOS 中安裝 uWSGI
1.通過(guò)pip安裝 uWSGI
pip install uwsgi
如果出現(xiàn)
致命錯(cuò)誤:Python.h:沒(méi)有那個(gè)文件或目錄
執(zhí)行如下命令
yum install libffi-devel -y
2.添加軟連接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/sbin/uwsgi
uWSGI的基礎(chǔ)配置
- chdir: WSGI 應(yīng)用目錄
- module:WSGI 應(yīng)用的模塊名字
- processes:uWSGI 進(jìn)程數(shù)
- (http-)socket:套接字路徑、地址
- max-requests:最大并發(fā)請(qǐng)求數(shù)
- vacuum:當(dāng)服務(wù)器退出時(shí)是否需要自動(dòng)清理文件邑贴,刪除相關(guān)的pid文件 socket文件 (Boolean)
uWSGI啟動(dòng)(兩種方式)
1.通過(guò)命令行啟動(dòng)
將配置通過(guò)命令行寫(xiě)入席里,進(jìn)而啟動(dòng)
uwsgi --chdir xxxx --socket :80 --max-requests 5000 --processes 4 --module xxx.wsgi
--chdir xxxx (指定 uwsgi 的應(yīng)用目錄)
--socket :80 (指定端口)
--max-requests (最大請(qǐng)求數(shù))
--processes (處理的進(jìn)程數(shù))
--module (指定具體的wsgi模塊)
2.使用配置文件啟動(dòng)
1.創(chuàng)建 uwsgi 的配置文件
vim uwsgi-demo.ini
2.寫(xiě)入配置文件
[uwsgi]
chdir = /xxxx/xx
http-scoket = :80
max-requests = 5000
processes = 4
module = xxx.wsgi
3.通過(guò)命令行執(zhí)行 wsgi 的配置
uwsgi --ini uwsgi-demo.ini
為什么需要uWSGI部署Django
- Django runserver 可以直接對(duì)外服務(wù),但是只用于測(cè)試拢驾,不安全且性能較差
- uWSGI可以很好的進(jìn)行多線程調(diào)用奖磁、進(jìn)程監(jiān)控,例如:uWSGI會(huì)監(jiān)測(cè)django服務(wù)是否掛了繁疤,掛了會(huì)主動(dòng)重啟
- uWSGI提供完善的請(qǐng)求日志處理
使用 uWSGI 部署測(cè)試
1.創(chuàng)建一個(gè)文件夾
mkdir deployment
cd deployment
2創(chuàng)建Python文件咖为,定義uWSGI應(yīng)用
touch uwsgi_test.py
3.寫(xiě)入相關(guān)配置
def application(env, start_response):
start_response('200 OK', [('Content-type', 'text/html')])
return [b'Hello World, Hello uWSGI']
4.運(yùn)行 uwsgi
uwsgi --http :8000 --wsgi-file uwsgi_test.py
使用 uWSGI 部署 django
1.修改 django 的 setting
ALLOWED_HOSTS = ['*'] # 開(kāi)啟所有人都可以訪問(wèn)
2.找到 django 目錄下的 wsgi文件執(zhí)行
django_deployment.wsgi
為對(duì)應(yīng)django項(xiàng)目下的文件相對(duì)路徑
uwsgi --http :8000 --module django_deployment.wsgi