背景
前幾天在學(xué)習(xí)負(fù)載均衡的知識(shí)咆繁,遇到了 Nginx 反向代理 的概念,其實(shí)在年初就寫過一次 Nginx 反向?qū)嵗墓P記,今天翻看發(fā)現(xiàn)很是潦草伟骨,而且當(dāng)時(shí)的編輯器也不滿足Markdown,作為尷尬癥晚期的我燃异,索性刪掉重新整理一篇 ...
【一】概念解釋
- 代理
代理其實(shí)就是一個(gè)中介携狭,A 和 B 本來可以直連,中間插入一個(gè) C回俐,C 就是中介逛腿。
- 正向代理
剛開始的時(shí)候,代理多數(shù)是幫助內(nèi)網(wǎng) client 訪問外網(wǎng) server 用的(比如HTTP代理)鲫剿,從內(nèi)到外鳄逾。
- 反向代理(Reverse Proxy)
- "反向"這個(gè)詞在這兒的意思其實(shí)是指方向相反
- 以代理服務(wù)器來接受Internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器灵莲;并將從服務(wù)器上得到的結(jié)果返回給Internet上請(qǐng)求連接的客戶端
- 此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器
- 當(dāng)一個(gè)代理服務(wù)器能夠代理外部網(wǎng)絡(luò)上的主機(jī)雕凹,訪問內(nèi)部網(wǎng)絡(luò)時(shí),這種代理服務(wù)的方式稱為反向代理服務(wù)政冻。
- 圖像解釋 【ps : 來源 知乎】
知乎用戶解釋圖
- 正向代理中枚抵,Proxy 和 Client 同屬一個(gè) LAN,對(duì) Server 透明明场;
- 反向代理中汽摹,Proxy 和 Server 同屬一個(gè) LAN,對(duì) Client 透明苦锨。
- 實(shí)際上 Proxy 在兩種代理中做的事都是代為收發(fā)請(qǐng)求和響應(yīng)逼泣,不過從結(jié)構(gòu)上來看正好左右互換了下,所以把后出現(xiàn)的那種代理方式叫成了反向代理舟舒。
- 形象圖【ps : 來源 知乎】
形象圖示
- 總結(jié)
正向代理隱藏真實(shí)客戶端拉庶,反向代理隱藏真實(shí)服務(wù)端
正向代理,代理的對(duì)象是客戶端秃励;反向代理氏仗,代理的對(duì)象是服務(wù)端
【二】反向代理的應(yīng)用/好處
- 反向代理的應(yīng)用:
現(xiàn)在許多大型 web 網(wǎng)站都用到反向代理。
除了可以防止外網(wǎng)對(duì)內(nèi)網(wǎng)服務(wù)器的惡性攻擊夺鲜、緩存以減少服務(wù)器的壓力和訪問安全控制之外皆尔,還可以進(jìn)行負(fù)載均衡,將用戶請(qǐng)求分配給多個(gè)服務(wù)器
- 反向代理的好處:
(1). 解決了網(wǎng)站服務(wù)器對(duì)外可見的問題币励;
(2). 節(jié)約了有限的 IP 地址資源慷蠕,企業(yè)內(nèi)所有的網(wǎng)站共享一個(gè)在 internet 中注冊(cè)的 IP 地址,這些服務(wù)器分配私有地址榄审,采用虛擬主機(jī)的方式對(duì)外提供服務(wù)砌们;
(3). 保護(hù)了真實(shí)的 web 服務(wù)器,web 服務(wù)器對(duì)外不可見,外網(wǎng)只能看到反向代理服務(wù)器浪感,而反向代理服務(wù)器上并沒有真實(shí)數(shù)據(jù)昔头,因此,保證了 web 服務(wù)器的資源安全影兽;
(4). 加速了對(duì)網(wǎng)站訪問速度揭斧,減輕 web 服務(wù)器的負(fù)擔(dān),反向代理具有緩存網(wǎng)頁的功能峻堰,如果用戶需要的內(nèi)容在緩存中讹开,則可以直接從代理服務(wù)其中獲取,減輕了 web 服務(wù)器的負(fù)荷捐名,同時(shí)也加快了用戶的訪問速度旦万。
(5).可以實(shí)現(xiàn)安全過濾,流控镶蹋,防 DDOS 等一系列策略
【三】反向代理的實(shí)現(xiàn)
- 1)需要有一個(gè)負(fù)載均衡設(shè)備來分發(fā)用戶請(qǐng)求成艘,將用戶請(qǐng)求分發(fā)到空閑的服務(wù)器上
- 2)服務(wù)器返回自己的服務(wù)到負(fù)載均衡設(shè)備
- 3)負(fù)載均衡將服務(wù)器的服務(wù)返回用戶
以上的潛臺(tái)詞是:用戶和負(fù)載均衡設(shè)備直接通信,也意味著用戶做服務(wù)器域名解析時(shí)贺归,解析得到的 IP 其實(shí)是負(fù)載均衡的 IP淆两,而不是服務(wù)器的 IP,這樣有一個(gè)好處是拂酣,當(dāng)新加入/移走服務(wù)器時(shí)秋冰,僅僅需要修改負(fù)載均衡的服務(wù)器列表,而不會(huì)影響現(xiàn)有的服務(wù)婶熬。(來自:知乎)
【四】Nginx 反向代理 操作
1). nginx 反向代理 參考配置代碼
#設(shè)定負(fù)載均衡的服務(wù)器列表
#weigth參數(shù)表示權(quán)值剑勾,權(quán)值越高被分配到的幾率越大
upstream Mos{
server 192.168.1.106:80 weight=3;
server 192.168.1.143:80 weight=1;
#server localhost:80 weight=1; #本機(jī)
}
server {
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /mnt/web/hyicnoa;
location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php?s=/$1 last;
}
proxy_pass http://Mos ; #在這里設(shè)置一個(gè)代理,和upstream的名字一樣
}
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ \.php$
{
proxy_pass http://192.168.1.106; #此處限制訪問 php 文件時(shí)赵颅,跳轉(zhuǎn)到192.168.1.106 服務(wù)器解析
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
}
2).提示
- 上述配置文件內(nèi)容僅供參考甥材,信息并未顯示完全
- 強(qiáng)烈建議不要直接修改 nginx.conf 文件,一般是根據(jù)類似如下的代碼
include /etc/nginx/conf.d/*.conf;
進(jìn)行對(duì)應(yīng)目錄下新建文件的配置性含,以避免較大的配置影響.- "proxy_pass http://xxxxxx" 作為代理的位置,需要明確自己在哪種條件下進(jìn)行代理的使用鸳惯,具體實(shí)踐需要參考 nginx 配置語法商蕴,著重在于正則表達(dá)的限制條件
3). 注意信息
- (1). 服務(wù)器列表僅做參考,以本次操作為例芝发,代理機(jī)為
192.168.1.87:80
绪商,則訪問靜態(tài)文件時(shí)會(huì)按 weight 比重分配到192.168.1.106:80
和192.168.1.143:80
服務(wù)器器,進(jìn)行負(fù)載分配 - (2).根據(jù)配置信息
location ~ \.php$
{
proxy_pass http://192.168.1.106; #此處限制訪問php文件時(shí)辅鲸,跳轉(zhuǎn)到192.168.1.106服務(wù)器解析
}
當(dāng)訪問 php 文件時(shí)格郁,會(huì)由 192.168.1.106 服務(wù)器解析內(nèi)容,完成后再交由192.168.1.87:80顯示給用戶.
- (3).針對(duì)不同的目錄進(jìn)行代理把下面的配置放到根目錄代理的上面
location /zmPro/ {
proxy_pass http://192.168.1.143; #當(dāng)訪問zmPro目錄時(shí),由該IP服務(wù)器進(jìn)行解析
}
- (4). 反向代理進(jìn)行的負(fù)載均衡需要注意 session 的使用限制, 參考文章介紹
- (5). 個(gè)人理解,負(fù)載均衡的配置只需更改一處 nginx 配置文件即可例书,要求服務(wù)器列表中的相應(yīng)目錄是盡量可以成功訪問的锣尉。
- (6).開啟服務(wù),允許訪問决采,本人測(cè)試時(shí)只是關(guān)閉了防火墻自沧,根據(jù)定義的均衡服務(wù)器,避免訪問文件的存在性.
4). 截圖
- default.conf 配置截圖树瞭,僅供參考
- 筆記截圖
5).結(jié)果描述
- 訪問 html 文件時(shí)拇厢,會(huì)根據(jù)權(quán)重由 192.168.1.106 和 192.168.1.143 進(jìn)行解析
- 訪問 php 文件時(shí),只會(huì)由 192.168.1.106 解析
- 訪問 zmPro 目錄下的文件時(shí)晒喷,會(huì)由 192.168.1.143 解析孝偎,此時(shí)如果是 html 文件,如果 192.168.1.106 對(duì)應(yīng)位置沒有相關(guān)文件凉敲,會(huì)根據(jù)前面的權(quán)重出現(xiàn)不同的訪問狀況衣盾,一種情況是由 192.168.1.143 正常解析,另一種情況是 192.168.1.106 無對(duì)應(yīng)文件而 404 解析失敗荡陷,如圖:
- 所以雨效,強(qiáng)烈建議匹配不同內(nèi)容時(shí),注意訪問的可行性废赞,以及文件的同步性徽龟,建議可參考文章 nginx 反向代理配置及優(yōu)化