Nginx正向代理與反向代理詳解
當(dāng)然可以,以下是對 Nginx 正向代理與反向代理 的詳細(xì)解析,包括概念、工作機(jī)制、配置示例、使用場景和區(qū)別等內(nèi)容,適用于開發(fā)、運(yùn)維及網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)場景。
Nginx正向代理與反向代理
一、什么是代理(Proxy)?
代理是一種網(wǎng)絡(luò)服務(wù),客戶端通過代理服務(wù)器間接訪問目標(biāo)資源。根據(jù)請求的方向不同,代理分為:
類型 | 說明 |
---|---|
正向代理 | 代理客戶端訪問外部資源(“我替你去”) |
反向代理 | 代理外部用戶訪問內(nèi)部服務(wù)器(“你來找我,我替你找它”) |
二、正向代理(Forward Proxy)
定義:
客戶端并不直接訪問目標(biāo)服務(wù)器,而是把請求交給代理服務(wù)器,由代理服務(wù)器轉(zhuǎn)發(fā)請求并返回響應(yīng)。
工作流程:
[客戶端] → [Nginx正向代理] → [目標(biāo)服務(wù)器] ↓ [響應(yīng)返回到客戶端]
使用場景:
- 訪問被屏 蔽的網(wǎng)站(如科學(xué)上網(wǎng))
- 客戶端隱藏真實(shí) IP
- 緩存加速訪問外部內(nèi)容
示例配置(Nginx):
# nginx.conf events {} http { server { listen 8888; resolver 8.8.8.8; location / { proxy_pass $scheme://$http_host$request_uri; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; } } }
使用方式(客戶端設(shè)置代理):
瀏覽器或 curl 設(shè)置代理為:http://<nginx-ip>:8888
三、反向代理(Reverse Proxy)
定義:
客戶端訪問代理服務(wù)器,代理根據(jù)配置將請求轉(zhuǎn)發(fā)到后端真實(shí)服務(wù)器(Upstream),客戶端無感知。
工作流程:
[客戶端] → [Nginx反向代理] → [后端服務(wù)器] ↓ [響應(yīng)返回到客戶端]
使用場景:
- 實(shí)現(xiàn)負(fù)載均衡
- 實(shí)現(xiàn) HTTPS 網(wǎng)關(guān) / TLS 卸載
- 內(nèi)網(wǎng)服務(wù)暴露給公網(wǎng)
- 提供統(tǒng)一入口,隱藏真實(shí)服務(wù)器結(jié)構(gòu)
示例配置(Nginx):
http { upstream backend { server 192.168.1.101:8080; server 192.168.1.102:8080; } server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
四、正向 vs 反向代理對比總結(jié)
比較項(xiàng) | 正向代理(Forward Proxy) | 反向代理(Reverse Proxy) |
---|---|---|
代理的對象 | 客戶端 | 服務(wù)器(后端) |
請求目標(biāo) | 客戶端指定的外部網(wǎng)站 | 內(nèi)部真實(shí)服務(wù) |
常用目的 | 幫助客戶端訪問目標(biāo) | 保護(hù)服務(wù)器、統(tǒng)一入口 |
客戶端感知 | 明確知道自己使用了代理 | 無需知道后端結(jié)構(gòu) |
配置位置 | 客戶端需配置代理 | 服務(wù)端配置即可 |
應(yīng)用場景 | 翻墻、匿名訪問、繞過限制 | 負(fù)載均衡、內(nèi)網(wǎng)服務(wù)暴露、緩存 |
五、反向代理的擴(kuò)展應(yīng)用
功能 | 說明 |
---|---|
負(fù)載均衡 | 多個后端服務(wù)器自動輪詢分發(fā)流量 |
HTTPS 網(wǎng)關(guān) | 客戶端連接為 HTTPS,后端可為 HTTP |
安全隔離 | 僅暴露代理,隱藏真實(shí)服務(wù) IP |
靜態(tài) + 動態(tài)分離 | 靜態(tài)資源由 Nginx 提供,動態(tài)由后端處理 |
緩存優(yōu)化 | 可配置緩存減少后端負(fù)載(如 CDN) |
六、附加示例:基于域名轉(zhuǎn)發(fā)
server { listen 80; server_name www.example.com; location / { proxy_pass http://192.168.1.100:8080; } } server { listen 80; server_name api.example.com; location / { proxy_pass http://192.168.1.200:8081; } }
總結(jié)一句話
- 正向代理 是“我找別人幫我出去”,常用于“訪問外部”;
- 反向代理 是“別人來找我,我?guī)退覂?nèi)部”,常用于“服務(wù)入口統(tǒng)一、隱藏后端”。
如果你還想了解:
- 正反向代理中的緩存策略
- 配合 HTTPS 的配置方式
- 與防火墻 / DNS / CDN 的協(xié)同機(jī)制
我也可以繼續(xù)補(bǔ)充。是否需要一張圖幫助你更直觀理解兩者結(jié)構(gòu)?
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Nginx服務(wù)器的nginx-http-footer-filter模塊配置
這篇文章主要介紹了Nginx服務(wù)器的nginx-http-footer-filter模塊配置,nginx-http-footer-filter用作在請求的頁面底部插入代碼,需要的朋友可以參考下2016-01-01權(quán)限問題導(dǎo)致Nginx 403 Forbidden錯誤的解決方法
這篇文章主要介紹了權(quán)限問題導(dǎo)致Nginx 403 Forbidden錯誤的解決方法,本文中導(dǎo)致 403 Forbidden錯誤的原因是配置文件中沒有指明一個用戶,需要的朋友可以參考下2014-08-08使用nginx方式實(shí)現(xiàn)http轉(zhuǎn)換為https的示例代碼
這篇文章主要介紹了使用nginx方式實(shí)現(xiàn)http轉(zhuǎn)換為https的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Nginx在Windows下的安裝及環(huán)境配置(將nginx作為服務(wù)運(yùn)行)
這篇文章主要介紹了Nginx在Windows下的安裝及環(huán)境配置,主要是將nginx作為服務(wù)運(yùn)行,需要的朋友可以參考下2018-11-11