Nginx反向代理與緩存用法及說明
一、正向代理和反向代理
1.1 正向代理(代理的是客戶端)
是什么:
- 就像一個(gè)中間人,幫你(客戶端)去訪問你想去的網(wǎng)站。
有啥用:
讓局域網(wǎng)里的電腦能上網(wǎng)。
可以緩存一些數(shù)據(jù),省流量。
訪問那些被墻了或者限制地區(qū)的網(wǎng)站。
隱藏你的真實(shí) IP,對(duì)方看到的是代理服務(wù)器的 IP。
配置思路:
- 客戶端訪問代理服務(wù)器,代理服務(wù)器再去請(qǐng)求目標(biāo)網(wǎng)站。
1.2 反向代理(代理的是服務(wù)器)
是什么:
你訪問一個(gè)網(wǎng)站,其實(shí)訪問的是代理服務(wù)器,它再偷偷去背后真正的服務(wù)器拿數(shù)據(jù)給你。你完全不知道背后是哪臺(tái)服務(wù)器。
有啥用:
負(fù)載均衡:把很多人的請(qǐng)求分散到多臺(tái)服務(wù)器上,防止一臺(tái)服務(wù)器累垮。
緩存:把不常變的圖片、頁(yè)面存起來,下次直接給你,更快。
動(dòng)靜分離:把圖片、CSS 等靜態(tài)文件和需要計(jì)算的動(dòng)態(tài)頁(yè)面(比如 PHP)分開處理。
多站點(diǎn)共用端口:
一臺(tái)服務(wù)器可以代理多個(gè)不同的網(wǎng)站。
常用模塊:
proxy_module(轉(zhuǎn)發(fā)HTTP請(qǐng)求)、upstream_module(定義服務(wù)器組)、stream_proxy_module(轉(zhuǎn)發(fā)TCP請(qǐng)求)等。
二、反向代理的核心配置
proxy_pass:最重要的一句,告訴 Nginx 把請(qǐng)求轉(zhuǎn)發(fā)給誰(shuí)。
如果地址后面沒有斜杠(/),會(huì)把客戶端請(qǐng)求的路徑拼在后面。
如果地址后面有斜杠(/),會(huì)替換掉客戶端請(qǐng)求的路徑。
如果
location用了正則表達(dá)式匹配,proxy_pass后面不能加斜杠。
其他小功能:
proxy_hide_header:不讓后端服務(wù)器的某些頭部信息(比如服務(wù)器版本)透?jìng)鹘o客戶端。proxy_pass_header:強(qiáng)制讓后端服務(wù)器的某些頭部信息透?jìng)鹘o客戶端。proxy_pass_request_body/headers:控制是否把客戶端的請(qǐng)求體和頭部轉(zhuǎn)發(fā)給后端(默認(rèn)都轉(zhuǎn)發(fā))。
三、配置實(shí)戰(zhàn)(舉例子)
3.1 最簡(jiǎn)單的反向代理
目標(biāo):訪問代理服務(wù)器(192.164.65.100),實(shí)際看到的是后端服務(wù)器(192.164.65.101)上的網(wǎng)站內(nèi)容。
操作:在代理服務(wù)器的配置里寫一句
proxy_pass http://192.164.65.101;就行了。
3.2 動(dòng)靜分離
目標(biāo):請(qǐng)求
/api開頭的地址,轉(zhuǎn)發(fā)給動(dòng)態(tài)服務(wù)器(101);請(qǐng)求/static開頭的地址,轉(zhuǎn)發(fā)給靜態(tài)服務(wù)器(103)。操作:配置兩個(gè)
location,分別指向不同的后端服務(wù)器。
3.3 緩存功能
目標(biāo):把后端返回的圖片、頁(yè)面存到代理服務(wù)器本地,下次有人要,直接給,不用再去麻煩后端。
操作:
- 先在
http塊里用proxy_cache_path定義一個(gè)緩存目錄和規(guī)則(比如放哪兒,多大,存多久)。 - 再在
server或location里用proxy_cache開啟緩存,用proxy_cache_valid設(shè)置哪些狀態(tài)碼的響應(yīng)需要緩存多久。 清緩存:直接刪緩存文件夾,或者用專門的模塊。
3.4 客戶端 IP 透?jìng)鳎ㄗ尯蠖酥勒l(shuí)在訪問)
問題:用了代理后,后端服務(wù)器看到的都是代理服務(wù)器的 IP,不知道真正的用戶是誰(shuí)。
一級(jí)代理:在代理服務(wù)器配置里加一句
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,把用戶的真實(shí) IP 塞進(jìn)請(qǐng)求頭里傳給后端。多級(jí)代理:每一級(jí)代理都這么配置,
X-Forwarded-For這個(gè)頭就會(huì)把經(jīng)過的所有 IP 都記錄下來,像一個(gè)鏈路清單。
3.5 & 3.6 負(fù)載均衡
是什么:把請(qǐng)求分給一組服務(wù)器(上游服務(wù)器組)去處理。
怎么配:
- 先用
upstream定義一個(gè)服務(wù)器組,把多臺(tái)后端服務(wù)器的 IP 列進(jìn)去。 - 然后在
location里用proxy_pass http://組名;把請(qǐng)求交給這個(gè)組處理。
調(diào)度算法(怎么分任務(wù)):
- 輪詢:一人一個(gè),輪流來。
- 加權(quán)輪詢:性能好的多分幾個(gè)任務(wù)(
weight=3),性能差的少分幾個(gè)(weight=1)。 - ip_hash:同一個(gè) IP 的人,每次都分給同一臺(tái)服務(wù)器(解決登錄狀態(tài)丟失問題)。
- least_conn:誰(shuí)當(dāng)前處理的連接少,就分給誰(shuí)。
- 第三方算法:
fair(誰(shuí)反應(yīng)快分給誰(shuí))、url_hash(同一個(gè)網(wǎng)址分給同一臺(tái)服務(wù)器,適合做緩存)。
服務(wù)器狀態(tài):
down:標(biāo)記為下線。backup:備胎服務(wù)器,其他主服務(wù)器都掛了才啟用。max_fails和fail_timeout:連續(xù)失敗幾次就認(rèn)為服務(wù)器掛了,過多久再去檢查它有沒有恢復(fù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx流量拷貝ngx_http_mirror_module模塊使用方法詳解
這篇文章主要介紹了Nginx流量拷貝,Nginx專門提供了ngx_http_mirror_module模塊,用來實(shí)現(xiàn)流量拷貝。將生產(chǎn)環(huán)境的流量拷貝到預(yù)上線環(huán)境或測(cè)試環(huán)境2022-04-04
通過Nginx的proxy_set_header設(shè)置請(qǐng)求頭無效的解決
這篇文章主要介紹了通過Nginx的proxy_set_header設(shè)置請(qǐng)求頭無效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Nginx反向代理在Web應(yīng)用中的實(shí)戰(zhàn)分享
本文將介紹Nginx反向代理的基本原理和配置,以及如何利用Nginx實(shí)現(xiàn)高可用性和故障轉(zhuǎn)移,最后,我們將探討如何監(jiān)控Nginx反向代理的性能并進(jìn)行日志分析,需要的朋友可以參考下2024-08-08
nginx使用nginx-rtmp-module模塊實(shí)現(xiàn)直播間功能
做的過程出現(xiàn)很多問題,環(huán)境其實(shí)就需要nginx就可以,然后就是在播放的問題,m3u8的格式,mac直接訪問就支持,蘋果系統(tǒng)原生H5支持m3u8,還有就是手機(jī)直接訪問也支持!但是其他其他系統(tǒng)PC端不支持,嘗試了好多都不行,最后終于找到了一個(gè)支持m3u8格式H5播放2017-10-10
Nginx配置origin限制跨域請(qǐng)求的詳細(xì)過程
這篇文章主要介紹了Nginx配置origin限制跨域請(qǐng)求的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān)的實(shí)現(xiàn)思路
這篇文章主要介紹了Nginx gateway集群和動(dòng)態(tài)網(wǎng)關(guān),動(dòng)態(tài)網(wǎng)關(guān)即任何配置都實(shí)現(xiàn)不用重啟網(wǎng)關(guān)服務(wù)器都可以及時(shí)刷新,對(duì)Nginx gateway集群相關(guān)知識(shí)感興趣的朋友一起看看吧2022-10-10

