一、ngx_http_proxy_module
1、 proxy_pass URL;
2、 proxy_set_header field value;
3、 proxy_cache_path; 代理緩存模塊
4、 proxy_cache zone | off;
5、 proxy_cache_key string;
6、 proxy_cache_valid [code ...] time;
7、 proxy_cache_use_stale;
8、 proxy_cache_methods GE
9、 proxy_hide_header field;
10、 proxy_connect_timeout time;
11、 proxy_send_timeout time;
12、 proxy_read_timeout time;
http反向代理
一、ngx_http_proxy_module
The ngx_http_proxy_module module allows passing requests to another
server.
1、 proxy_pass URL;
Context:location, if in location, limit_except
注意: proxy_pass后面的路徑不帶uri時(shí),其會(huì)將location的uri傳遞給后端主機(jī)
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 最后沒(méi)有/
}
...
}
上面示例: http://HOSTNAME/uri --> http://host/uri
http://host[:port]/ 意味著: http://HOSTNAME/uri --> http://host/
proxy_pass后面的路徑是一個(gè)uri時(shí),其會(huì)將location的uri替換為proxy_pass的uri
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host/new_uri/;
}
...
}
http://HOSTNAME/uri/ --> http://host/new_uri/
如果location定義其uri時(shí)使用了正則表達(dá)式的模式,則proxy_pass之后必須不能使用uri; 用戶(hù)請(qǐng)求時(shí)傳遞的uri將直接附加代理到的服務(wù)的之后
server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
proxy_pass http://host; 不能加/
}
...
}
http://HOSTNAME/uri/ --> http://host/uri/
不加斜線后面有*.jpg之類(lèi)的都能顯示出來(lái),只要用正則表達(dá)式就不能用uri
負(fù)載機(jī):107 centos7
后端機(jī)器:106 centos6
后端機(jī)器:108 centos7
實(shí)驗(yàn)?zāi)康模?/h6>
訪問(wèn)107機(jī)器www.a.com/.imgs文件轉(zhuǎn)發(fā)到108機(jī)器
訪問(wèn)107機(jī)器www.a.com/.html文件轉(zhuǎn)發(fā)到106機(jī)器
后端機(jī)啟動(dòng)http服務(wù)
106
cd /var/www/html
cat index.html
Welcome to centos6 106
108
cd /var/www/html
cat index.html
centos7 108
負(fù)載機(jī)107
location 代理功能必須放在location if語(yǔ)句塊里面,只要訪問(wèn)根數(shù)據(jù)都會(huì)調(diào)度到某個(gè)服務(wù)器上面去調(diào)度到106機(jī)器上面
106機(jī)器查看日志顯示負(fù)載機(jī)107訪問(wèn)
為了測(cè)試看的更清楚些,創(chuàng)建a.html,在107負(fù)載機(jī)上面更容易查看
107負(fù)載機(jī)查看日志,訪問(wèn)網(wǎng)頁(yè)看到的是106后端機(jī)里面的內(nèi)容
進(jìn)入正題
訪問(wèn)107機(jī)器www.a.com/.imags 文件轉(zhuǎn)發(fā)到108機(jī)器
訪問(wèn)107機(jī)器www.a.com/.html 文件轉(zhuǎn)發(fā)到106機(jī)器
測(cè)試跳轉(zhuǎn)到108機(jī)器
108機(jī)器
訪問(wèn)images目錄107負(fù)載機(jī)做反向代理到108機(jī)器上
107測(cè)試跳轉(zhuǎn)到106機(jī)器
106機(jī)器
訪問(wèn)107機(jī)器下的a.html,b.html
107機(jī)器
訪問(wèn)圖片后綴的更合理些108圖片后綴(靜態(tài)),106php后綴(動(dòng)態(tài))
106機(jī)器安裝php模塊
yum install php
cd /var/www/html
vim a.php
service httpd restart
108機(jī)器
圖片存放到html目錄下面
圖片比較小
實(shí)現(xiàn)了代理動(dòng)靜分離
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 最后沒(méi)有/
}
最后ip后面加斜線做測(cè)試 ,前面測(cè)試都沒(méi)有加斜線
加斜線效果就不一樣了,相當(dāng)于置換 images=/var/www/html/,相當(dāng)于看到的是/var/www/html/下的aa.jpg
沒(méi)有斜線代表補(bǔ)加uri
2、 proxy_set_header field value;
設(shè)定發(fā)往后端主機(jī)的請(qǐng)求報(bào)文的請(qǐng)求首部的值
remote_addr代表客戶(hù)端的IP,但它的值不是由客戶(hù)端提供的,而是服務(wù)端根據(jù)客戶(hù)端的ip指定的,當(dāng)
你的瀏覽器訪問(wèn)某個(gè)網(wǎng)站時(shí),假設(shè)中間沒(méi)有任何代理,那么網(wǎng)站的web服務(wù)器(Nginx,Apache等)
就會(huì)把remote_addr設(shè)為你的機(jī)器IP,如果你用了某個(gè)代理,那么你的瀏覽器會(huì)先訪問(wèn)這個(gè)代理,然后
再由這個(gè)代理轉(zhuǎn)發(fā)到網(wǎng)站,這樣web服務(wù)器就會(huì)把remote_addr設(shè)為這臺(tái)代理機(jī)器的IP。
正如上面所述,當(dāng)你使用了代理時(shí),web服務(wù)器就不知道你的真實(shí)IP了,為了避免這個(gè)情況,代理
服務(wù)器通常會(huì)增加一個(gè)叫做x_forwarded_for的頭信息,把連接它的客戶(hù)端IP(即你的上網(wǎng)機(jī)器IP)
加到這個(gè)頭信息里,這樣就能保證網(wǎng)站的web服務(wù)器能獲取到真實(shí)IP
Context: http, server, location
proxy_set_header X-Real-IP $remote_addr; X-Real-IP首部名
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 可以看到多層首部代理地址
標(biāo)準(zhǔn)格式如下:
X-Forwarded-For: client1, proxy1, proxy2
分析類(lèi)型
在proxy里面添加新的字段,客戶(hù)端本身不帶字段,人為插上首部,服務(wù)器就能收到首部
把后端首部信息修改,把監(jiān)控的對(duì)應(yīng)日志首部信息加上
vim vhosts.conf 添加首部信息
108機(jī)器要在http配置文件中設(shè)置頭部信息
vim /etc/httpd/conf/httpd.conf 在客戶(hù)端顯示首部 ,首部信息必須加 " i "
引用格式
重啟httpd服務(wù)
訪問(wèn)刷新代理機(jī)器地址,查看日志信息得到真實(shí)ip
強(qiáng)制刷新 -f
vip公網(wǎng)地址,后端是私網(wǎng)地址,
后端rsserv1
后端rsserv2
客戶(hù)端把請(qǐng)求發(fā)送給vip
公網(wǎng)客戶(hù)端訪問(wèn)107代理機(jī)器公網(wǎng)ip
107機(jī)器兩個(gè)網(wǎng)卡 一個(gè)公網(wǎng),一個(gè)內(nèi)網(wǎng)
客戶(hù)端訪問(wèn)107公網(wǎng)會(huì)轉(zhuǎn)發(fā)到106機(jī)器
客戶(hù)端訪問(wèn)107看到的信息實(shí)際上是從106轉(zhuǎn)發(fā)過(guò)去的,
106測(cè)試
108機(jī)器測(cè)試性能
107機(jī)器
代理緩存模塊
3、 proxy_cache_path;
定義可用于proxy功能的緩存; Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time]
[manager_threshold=time] [loader_files=number] [loader_sleep=time]
[loader_threshold=time] [purger=on|off] [purger_files=number]
[purger_sleep=time] [purger_threshold=time];
http代碼段定義path路徑 levels 設(shè)置緩存文件目錄層次;levels=1:2:2 表示三級(jí)目錄
keys_zone 設(shè)置緩存名字和共享內(nèi)存大小
inactive 在指定時(shí)間內(nèi)沒(méi)人訪問(wèn)則被刪除 過(guò)期時(shí)間
max_size 最大緩存空間,如果緩存空間滿(mǎn),默認(rèn)覆蓋掉緩存時(shí)間最長(zhǎng)的資源。
vim /etc/nginx/nginx.conf 設(shè)置pass路徑
調(diào)用keys_zone 設(shè)置緩存名字
vim /etc/httd/conf/vhost.conf
nginx -t
nginx -s reload
訪問(wèn) 107 curl http://172.18.0.107/m.html
107機(jī)器
-文件夾名字叫pcache 里面還沒(méi)有緩存,訪問(wèn)一次里面就有緩存
4、 proxy_cache zone | off; 默認(rèn)off
指明調(diào)用的緩存,或關(guān)閉緩存機(jī)制; Context:http,
server, location
5、 proxy_cache_key string;
緩存中用于“鍵”的內(nèi)容
默認(rèn)值: proxy_cache_key $scheme$proxy_host$request_uri;
6、 proxy_cache_valid [code ...] time;
定義對(duì)特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時(shí)長(zhǎng)
定義在http{...}中
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
示例:
在http配置定義緩存信息
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:1:1 keys_zone=proxycache:20m
inactive=120s max_size=1g;
調(diào)用緩存功能,需要定義在相應(yīng)的配置段,如server{...};
proxy_cache proxycache;
proxy_cache_key $request_uri; 請(qǐng)求的uri
proxy_cache_valid 200 302 301 1h; 響應(yīng)碼緩存 時(shí)間
proxy_cache_valid any 1m; 其他內(nèi)容響應(yīng)1分鐘
7、 proxy_cache_use_stale;
proxy_cache_use_stale error | timeout |
invalid_header | updating | http_500 | http_502 |
http_503 | http_504 | http_403 | http_404 | off ...
在被代理的后端服務(wù)器出現(xiàn)哪種情況下,可以真接使用過(guò)期的緩存響應(yīng)客戶(hù)端
8、 proxy_cache_methods GET | HEAD | POST ...;
對(duì)哪些客戶(hù)端請(qǐng)求方法對(duì)應(yīng)的響應(yīng)進(jìn)行緩存, GET和HEAD方法總是被緩存
9、 proxy_hide_header field;
By default, nginx does not pass the header fields
“Date”, “Server”, “X-Pad”, and “X-Accel-...” from the
response of a proxied server to a client. 用于隱藏后端服務(wù)器特定的響應(yīng)首部
10、 proxy_connect_timeout time;
定義與后端服務(wù)器建立連接的超時(shí)時(shí)長(zhǎng),如超時(shí)會(huì)出現(xiàn)502錯(cuò)誤,默認(rèn)為60s,一般不建議超出75s,
11、 proxy_send_timeout time;
把請(qǐng)求發(fā)送給后端服務(wù)器的超時(shí)時(shí)長(zhǎng);默認(rèn)為60s
12、 proxy_read_timeout time;
等待后端服務(wù)器發(fā)送響應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng), 默認(rèn)為60s
最后編輯于 :2017.12.18 19:25:15
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者 【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。 平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。