- 正向代理: 對(duì)于客戶端,我的請(qǐng)求到達(dá)Nginx,Nginx把我的請(qǐng)求分配到外部服務(wù)器,隱藏了服務(wù)端的身份
- 反向代理: 服務(wù)端向外部客戶端提供服務(wù),但是任務(wù)是由Nginx下發(fā)的,不知道客戶端是誰(shuí)
location / {
: proxy_pass http://localhost:8000; # 設(shè)定請(qǐng)求跳轉(zhuǎn)后的地址,可以使用 hostname 或 IP:Port 形式
: proxy_set_header X-Real-IP $remote_addr;# 后端請(qǐng)求攜帶原始請(qǐng)求的真實(shí) IP 地址
proxy_pass
- 設(shè)置被代理服務(wù)器的地址和被映射的URI,地址可以使用主機(jī)名或IP加端口號(hào)的形式
1. proxy_pass路徑
!!!后面的/很重要
location /html/ {
1. proxy_pass http://proxy.com;
2. proxy_pass http://proxy.com/;
}
假設(shè)訪問(wèn)的url是 http://domain.com/html/test.js
- 對(duì)于1來(lái)說(shuō) proxy.com 后面沒(méi)有"/",表示"/html/" 請(qǐng)求(包括自己)后續(xù)的路徑及其參數(shù)等關(guān)鍵字都由http://a.com/來(lái)處理,代理后變成了http://proxy.com/html/test.js
- 對(duì) 2來(lái)所 proxy.com 后面有"/",表示"/html/" 請(qǐng)求后續(xù)的路徑及其參數(shù)等關(guān)鍵字都由 http://a.com/來(lái)處理,代理后變成了http://proxy.com/test.js
2. 具體設(shè)置
server {
listen 8000;
location / {
proxy_pass http://192.168.31.129:8001;
}
}
!!一個(gè)請(qǐng)求的生命周期
這個(gè)server服務(wù)監(jiān)聽(tīng)0.0.0.0:8000
端口監(jiān)聽(tīng)表示本機(jī)素有ip的8000端口,如果有客戶端請(qǐng)求到我們本機(jī)的8000端口,則開(kāi)始匹配, /
表示匹配所有的路徑,對(duì)8000端口無(wú)條件轉(zhuǎn)發(fā)到http://192.168.31.129:8001;
ps:我們的django服務(wù)器需要綁定http://192.168.31.129:8001;
!!! Nginx服務(wù)器地址需要添加到Django后臺(tái)的settings允許訪問(wèn)的白名單中
ALLOWED_HOSTS = [
...
'192.168.31.131' #Nginx服務(wù)器地址
...
]
!!! Nginx服務(wù)器并不在Django的CORS跨域白名單中
# 需要手動(dòng)添加
CORS_ORIGIN_WHITELIST = (
...
'192.168.31.131' #Nginx服務(wù)器地址
...
)