先說說項(xiàng)目的是干啥的
本來咱們玩web只需要django就能建立一個(gè)正兒八經(jīng)帶server的服務(wù)器碟摆,不過django自帶的只能支持單并發(fā)的訪問述暂,而且效果不是特別好痹升。
這個(gè)時(shí)候就用到了 nginx ,關(guān)于nginx網(wǎng)上的介紹很多我就不多說了畦韭,只需要知道這玩意是一個(gè)服務(wù)器框架疼蛾,用了它相當(dāng)于tomcat一樣自帶一個(gè)服務(wù)器。
不過由于nginx以及一些其他原因艺配,靜態(tài)資源的訪問不是特別好察郁,這個(gè)時(shí)候就需要用到uwsgi這個(gè)框架。
最后在實(shí)際生產(chǎn)過程中妒挎,現(xiàn)在大部分都是使用https訪問绳锅,所以最后在nginx中配置好了SSL證書西饵,我們就可以愉快的用https訪問酝掩,而且環(huán)境搭建好了和我們的真正邏輯代碼是解耦的,所以一次搭建眷柔,終身爽快期虾。
下面我會仔細(xì)說名安裝和配置過程 環(huán)境是(ubuntu + nginx 1.103 + uwsgi 最新版 + django 2.1.3 +python 3.5)
安裝nginx:
再控制臺中輸入即可按章nginx
~$ sudo apt-get install nginx #安裝
但是這種安裝方法可能會出現(xiàn)問題,不過都是小問題驯嘱,具體百度一下就行了
跟著命令好一串?dāng)]下來镶苞,我相信你已經(jīng)裝好了nginx。
然后我們需要測試一下鞠评。
我們需要在 ubuntu 中找到這個(gè) etc/nginx/nginx.conf 文件茂蚓,這個(gè)文件是nginx的配置文件。
nginx.conf 中又一個(gè) http{} 里面可以配置若干個(gè) server{} 剃幌。其目的就是監(jiān)聽http訪問中的若干端口聋涨,這里我們需要添加一個(gè)server{}如下:
server {
listen 8000; # 修改端口號
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
這段的意思就是監(jiān)聽8000 端口。
接下來配置好了 我們使用
nginx -t 命令檢測一下是否配置正確
如果沒問題則直接在命令行輸入 nginx 即可啟用nginx负乡。反正我用的這個(gè)版本是這樣直接啟動(dòng)牍白。
這個(gè)時(shí)候我們直接在瀏覽器輸入127.0.0.1:8000 來測試nginx是否配置成功
如果成功則會出現(xiàn)
安裝uwsgi
咱們先把nginx給停掉 使用命令 nginx -s stop
uwsgi 是python自帶的包 所以安裝起來非常方便 只需要
pip install uwsgi 即可
咱們測試一下 uwsgi是否可用
隨便找個(gè)位置建立一個(gè)文件 test.py
里面的代碼是
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在這個(gè)目錄下運(yùn)行命令
uwsgi --http :8000 --wsgi-file test.py
意思是使用組建 uwsgi 監(jiān)聽端口8000 并且運(yùn)行這個(gè)test.py文件,如果正常抖棘,會在瀏覽器訪問127.0.0.1:8000時(shí)出現(xiàn):
Hello World
然后就是django 這個(gè)也是python的包 我默認(rèn)你已經(jīng)有了一個(gè)基于django可以運(yùn)行的項(xiàng)目茂腥。
把uwsgi和django結(jié)合起來
這個(gè)時(shí)候 我們就需要用到 uwsgi的一種配置文件。我們隨便找個(gè)目錄新建一個(gè)demo.ini文件
文件內(nèi)容如下:
[uwsgi]
socket = 0.0.0.0:8000
#真實(shí)服務(wù)的端口 這個(gè)8000端口 是把nginx 和django串起來的 并不是實(shí)際瀏覽器訪問的接口
chdir = /root/englishDemo/demoWB/ #我們django項(xiàng)目的根目錄
# wsgi.py文件在項(xiàng)目中的位置 這個(gè)文件每個(gè)django項(xiàng)目都有
module = demoWB.wsgi
# process-related settings
# master
master = true
# 運(yùn)行的進(jìn)程數(shù)
processes = 4
vacuum = true
這個(gè)配置文件還有很多內(nèi)容切省,讀者有需要可以自行查閱最岗。
現(xiàn)在咱們只要運(yùn)行這個(gè)配置文件
uwsgi --ini demo.ini
即可運(yùn)行django程序了。是不是很方便朝捆,不用runserve 每次指定域名和端口號
相當(dāng)于是uwsgi代替我們執(zhí)行
把nginx 和 uwsgi 結(jié)合起來
這一部分也很簡單 我們只需要修改nginx中在安裝過程中提到的配置文件即可
etc/nginx/nginx.conf
打開這個(gè)文件后般渡,我們在原有的基礎(chǔ)上修改http{}中的內(nèi)容
upstream django {
server 0.0.0.0:8000; #web的socket端口
}
server{
listen 80;
access_log /root/log.txt; # Nginx日志配置
server_name www.asdasasd.com; #這里輸入你自己的網(wǎng)址
charset utf-8;
error_page 404 /404.html; # 錯(cuò)誤頁面
error_page 500 502 503 504 /50x.html; # 錯(cuò)誤頁面
location / { # 這個(gè)location就和咱們Django的url(r'^admin/', admin.site.urls),
root /root/englishDemo/demoWB; #django項(xiàng)目的根目錄
include uwsgi_params; # 導(dǎo)入一個(gè)Nginx模塊他是用來和uWSGI進(jìn)行通訊的
uwsgi_connect_timeout 30; # 設(shè)置連接uWSGI超時(shí)時(shí)間
uwsgi_pass django; # 指定uwsgi的sock文件所有動(dòng)態(tài)請求就會直接丟給他
}
}
重啟nginx的時(shí)候就可以和uwsgi結(jié)合起來了。
nginx配置SSL證書
這個(gè)證書可以從很多地方獲得。我在這里舉例從阿里云上
先選擇網(wǎng)盾 SSL證書
選擇免費(fèi)版本
購買之后審核完成诊杆, 會又下載連接歼捐,下載之后是 .pem 和 .key的兩個(gè)文件。
咱們需要通過這兩個(gè)文件配置nginx晨汹。
還是打開剛剛的 nginx.conf配置文件豹储。修改為
server {
listen 443; #這里需要443 為https 默認(rèn)的端口
access_log /root/log.txt; # Nginx日志配置
server_name www.xxxxxxxx.com; #這里是你的域名
ssl on;
root html;
index index.html index.htm;
ssl_certificate /etc/nginx/cert/xxxxxxxx.pem; #你的pem 前面的目錄可以自己隨便建立
ssl_certificate_key /etc/nginx/cert/xxxxxxxx.key; #你的key 前面的目錄可以自己隨便建立
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /root/englishDemo/demoWB;
include uwsgi_params; # 導(dǎo)入一個(gè)Nginx模塊他是用來和uWSGI進(jìn)行通訊的
uwsgi_connect_timeout 30; # 設(shè)置連接uWSGI超時(shí)時(shí)間
uwsgi_pass django; # 指定uwsgi的sock文件所有動(dòng)態(tài)請求就會直接丟給他
}
}
重啟一下nginx即可
這一波操作完成