django8.5?項(xiàng)目部署Nginx的操作步驟
1、概念:
Nginx是輕量級(jí)的高性能Web服務(wù)器,提供了諸如HTTP代理和反向代理、負(fù)載均衡等一系列重要的特性。由C語(yǔ)言編寫,執(zhí)行效率高。
- 作用:
負(fù)載均衡,多臺(tái)服務(wù)器輪流處理請(qǐng)求。
反向代理(nginx接到請(qǐng)求之后,可以把這個(gè)請(qǐng)求轉(zhuǎn)發(fā)給后邊的若干uWSGI,再給運(yùn)行著Django的機(jī)器)
- 原理:客戶端請(qǐng)求nginx,再由nginx將請(qǐng)求轉(zhuǎn)發(fā)給uWSGI,再給Django。
2.安裝:sudo apt install nginx
,這是系統(tǒng)級(jí)的組件,所以要拿apt來(lái)裝,安裝完畢之后,可以輸入nginx -v
查看。
3.配置:
1.修改nginx的配置文件: /etc/nginx/sites-enables/default , sudo vim該文件.
#在server節(jié)點(diǎn)下添加新的location項(xiàng),指向uwsgi的ip和端口。 server { ... location / { #禁掉try_files uwsgi_pass 127.0.0.1:8000; #重定向到127.0.0.1的8000端口(所有/ 開頭的請(qǐng)求,都用uwsgi的協(xié)議轉(zhuǎn)發(fā)給127.0.0.1:8000) include /etc/nginx/uwsgi_params; #將所有的參數(shù)轉(zhuǎn)到uwsgi下 } }
2.改完之后就重啟nginx:
sudo /etc/init.d/nginx restart
.
用到的命令有:sudo /etc/init.d/nginx start|stop|restart|status或者sudo service nginx start|stop|restart|status
注意:nginx配置只要修改,就需要重啟,否則配置不生效。sudo nginx -t 可以檢查修改之后語(yǔ)法有沒(méi)有問(wèn)題。
3.修改uWSGI配置:
說(shuō)明nginx負(fù)責(zé)接收請(qǐng)求,并把請(qǐng)求轉(zhuǎn)發(fā)給后面的uWSGI,此模式下,uWSGI需要以socket模式啟動(dòng),修改項(xiàng)目同名目錄下的uwsgi.ini文件。
[uwsgi] socket=127.0.0.1:8000 #把http=127.0.0.1:8000注釋掉
改完之后,再重啟uWSGI(cd到能看見uwsgi.ini的那個(gè)文件夾,再輸入命令。uWSgi開著的話就先停掉,sudo uwsgi --stop uwsgi.pid
,停下之后一定要ps aux|grep 'uwsgi'
檢查一下,是不是停止成功。再啟動(dòng)sudo uwsgi --ini uwsgi.ini
,啟動(dòng)之后也ps aux|grep 'uwsgi'
檢查是否啟動(dòng)啟動(dòng)成功)
nginx監(jiān)聽的是80,uWSGI監(jiān)聽的是8000,那么測(cè)試效果時(shí),瀏覽器中輸入的地址端口號(hào)應(yīng)該是80,因?yàn)槟J(rèn)的就是80,所以可以直接訪問(wèn)127.0.0.1開頭的地址,例如127.0.0.1/test_upload或者127.0.0.1:80/test_upload.
4.常見問(wèn)題:(如果涉及到權(quán)限較高的很多操作,可以先sudo su
進(jìn)入超級(jí)用戶,后邊就能正常使用命令了)
1.排查錯(cuò)誤時(shí)可以看日志:
1.nginx日志位置:
異常信息 /var/log/nginx/error.log ;
正常信息 /var/log/nginx/access.log
2.uwsgi日志文件:在項(xiàng)目同名目錄下,uwsgi.log
2.訪問(wèn)127.0.0.1:80 地址,出現(xiàn)502響應(yīng):
502響應(yīng)表示nginx反向代理配置成功,但是對(duì)應(yīng)的uWSGI未啟動(dòng),解決方法就是cd到uwsgi.ini在的那個(gè)文件夾,uwsgi --ini uwsgi.ini
啟動(dòng)
3.訪問(wèn)127.0.0.1:80/url 出現(xiàn)404響應(yīng):有兩種情況:
1.如果是一個(gè)很“django”的黃色報(bào)錯(cuò)頁(yè),估計(jì)就是寫的路由錯(cuò)了,當(dāng)前的這個(gè)路由沒(méi)在django中配置。
2.也可能是nginx配置錯(cuò)誤,沒(méi)有禁掉try_files。
5.nginx靜態(tài)文件配置:
- 創(chuàng)建新路徑:主要存在Django的所有靜態(tài)文件,如:/home/tarena/項(xiàng)目名_static/
- 在Django的settings.py中添加新配置:
STATIC_ROOT='/home/tarena/項(xiàng)目名_static/static
; STATIC_ROOT是正式上線之后,靜態(tài)文件的存儲(chǔ)目錄 ; 防止路徑拼錯(cuò),可以使用pwd命令看一下,直接復(fù)制。 - 進(jìn)入項(xiàng)目目錄后,執(zhí)行
python manage.py collectstatic
(只要有靜態(tài)文件的添加,就要執(zhí)行這條命令), 執(zhí)行該命令后,Django將項(xiàng)目中所有靜態(tài)文件復(fù)制到STATIC_ROOT中,包括Django內(nèi)建的靜態(tài)文件。 - 靜態(tài)文件收集好之后,得告訴nginx什么樣的請(qǐng)求是靜態(tài)資源請(qǐng)求,以及這個(gè)請(qǐng)求來(lái)了之后,nginx該去怎么處理:
在nginx配置中添加新的配置:修改 /etc/nginx/sites-enabled/default,(sudo vim,否則權(quán)限不夠。)新添加location /static 路由配置,重定向到指定的 第一步創(chuàng)建的路徑即可。
server { ... location /static { #root 第一步創(chuàng)建的文件夾的絕對(duì)路徑,如: root /home/tarena/項(xiàng)目名_static; } }
添加location沒(méi)有順序要求.
添加完之后記得保存退出,Esc->:wq->回車 ,然后重啟nginx,使用命令sudo /etc/init.d/nginx restart
。
6.404/500頁(yè)面:
在模板文件中添加404.html模板,當(dāng)視圖觸發(fā)Http404異常時(shí)將會(huì)被顯示。404.html僅在發(fā)布版中(即settings.py中的DEBUG=False時(shí))才起作用。
當(dāng)響應(yīng)處理函數(shù)觸發(fā)Http404異常時(shí)就會(huì)跳轉(zhuǎn)到404界面。
7.郵箱告警:
1.當(dāng)正式服務(wù)器上代碼運(yùn)行有報(bào)錯(cuò)時(shí),可以將錯(cuò)誤追溯信息發(fā)送至指定的郵箱:
在settings.py中 —— 在基礎(chǔ)郵箱授權(quán)后,添加如下配置:
# 關(guān)閉調(diào)試模式 DEBUG = False # 錯(cuò)誤報(bào)告接收方 ADMINS = [('xxx', 'xxxxxxx@example.com'), ('yyy', 'yyyyyyy@example.com')] # 發(fā)送錯(cuò)誤報(bào)告方,默認(rèn)為root@localhost賬戶,多數(shù)郵件服務(wù)器會(huì)拒絕,所以改成email配置中的郵箱,也就是授權(quán)的那個(gè)郵箱 SERVER_EMAIL = 'email配置中的郵箱'
2.django可以把報(bào)錯(cuò)郵件中的敏感信息用*過(guò)濾掉:
1.過(guò)濾局部變量:使用sensitive_variables()裝飾器(多個(gè)裝飾器時(shí)得放在最上邊)
from django.views.decorators.debug import sensitive_variables @sensitive_variables('user', 'pw', 'cc') # 參數(shù)就是想過(guò)濾掉的數(shù)據(jù)的變量名 def process_info(user): pw = user.pass_word cc = user.credit_card_number name = user.name ...
2.過(guò)濾POST數(shù)據(jù):
from django.views.decorators.debug import sensitive_post_parameters @sensitive_post_parameters('password', 'username') def index(request): s = request.POST['username'] + request.POST['abcd'] # 'abcd' 并不存在,此時(shí)會(huì)引發(fā)error,POST中的username和password的值就會(huì)被替換為 ****
到此這篇關(guān)于django8.5 項(xiàng)目部署——Nginx的文章就介紹到這了,更多相關(guān)django項(xiàng)目部署Nginx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)nginx實(shí)現(xiàn)方向代理過(guò)程圖解
這篇文章主要介紹了通過(guò)nginx實(shí)現(xiàn)方向代理過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02CentOS6使用nginx搭建web網(wǎng)站服務(wù)的方法
這篇文章主要介紹了CentOS6使用nginx搭建web網(wǎng)站服務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07詳解Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化
這篇文章主要介紹了Nginx 靜態(tài)文件服務(wù)配置及優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Nginx反向代理出現(xiàn)502?Bad?Gateway問(wèn)題解決
在配置Nginx反向代理時(shí)遇到502 Bad Gateway錯(cuò)誤,經(jīng)過(guò)排查發(fā)現(xiàn)是SSL握手問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10Nginx解決轉(zhuǎn)發(fā)地址時(shí)跨域的問(wèn)題
這篇文章主要介紹了Nginx實(shí)現(xiàn)轉(zhuǎn)發(fā)地址解決跨域問(wèn)題的方法,文中介紹的很詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01Nginx服務(wù)器中處理AJAX跨域請(qǐng)求的配置方法講解
這篇文章主要介紹了Nginx服務(wù)器中處理AJAX跨域請(qǐng)求的配置方法講解,包括Nginx作Apache的反向代理時(shí)的配置方法,需要的朋友可以參考下2016-01-01Nginx中add_header和proxy_set_header的區(qū)別及說(shuō)明
這篇文章主要介紹了Nginx中add_header和proxy_set_header的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06