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

