Nginx反向代理作為構(gòu)建現(xiàn)代Web架構(gòu)的基石技術(shù),在大型架構(gòu)發(fā)揮著至關(guān)重要的作用.
Nginx反向代理基礎(chǔ)配置
最簡(jiǎn)單且最典型的反向代理場(chǎng)景,用戶(hù)請(qǐng)求先到達(dá)Nginx服務(wù)器,再由Nginx轉(zhuǎn)發(fā)至后端的應(yīng)用服務(wù)器(如Tomcat、Node.js等)。
這種方式可以隱藏后端服務(wù)器地址,增強(qiáng)系統(tǒng)安全性,同時(shí)可進(jìn)行請(qǐng)求過(guò)濾和負(fù)載分擔(dān)。
配置示例:
假設(shè)后端服務(wù)地址為http://127.0.0.1:8080
。
- server {
- listen 80;
- server_name example.com;
-
- location /{
- proxy_pass http://127.0.0.1:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
重點(diǎn)解析:
proxy_pass
:指定請(qǐng)求應(yīng)轉(zhuǎn)發(fā)到的后端服務(wù)器地址。proxy_set_header
:傳遞Host和客戶(hù)端真實(shí)IP,確保后端能夠獲取到正確請(qǐng)求信息。- 監(jiān)聽(tīng)80端口,用于HTTP請(qǐng)求。
使用價(jià)值:
簡(jiǎn)單直觀,適合單一后臺(tái)應(yīng)用,快速搭建反向代理。
配置HTTPS反向代理
場(chǎng)景說(shuō)明:我 們的站點(diǎn)需要安全通信,使用HTTPS協(xié)議。
Nginx作為反向代理終端接受HTTPS請(qǐng)求,解密后轉(zhuǎn)發(fā)給后端HTTP應(yīng)用服務(wù)器,是常見(jiàn)的做法。
配置示例:
假設(shè)證書(shū)文件路徑為/etc/nginx/ssl/server.crt
和/etc/nginx/ssl/server.key
,后端仍為http://127.0.0.1:8080
。
- server {
- listen 443 ssl;
- server_name example.com;
-
- ssl_certificate /etc/nginx/ssl/server.crt;
- ssl_certificate_key /etc/nginx/ssl/server.key;
-
- ssl_protocols TLSv1.2TLSv1.3;
- ssl_ciphers HIGH:!aNULL:!MD5;
-
- location /{
- proxy_pass http://127.0.0.1:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
-
- # 可選:將HTTP請(qǐng)求重定向至HTTPS
- server {
- listen 80;
- server_name example.com;
-
- return301 https://$host$request_uri;
- }
重點(diǎn)解析:
listen 443 ssl;
監(jiān)聽(tīng)443端口并啟用SSL。- 配置證書(shū)路徑及SSL協(xié)議、加密套件。
- HTTP請(qǐng)求重定向至HTTPS,強(qiáng)制安全訪問(wèn)。
- 反向代理配置與HTTP相同,但請(qǐng)求經(jīng)Nginx時(shí)已完成解密。
使用價(jià)值:
保障通信安全,適合需要TLS加密的線上應(yīng)用環(huán)境。
負(fù)載均衡反向代理配置
場(chǎng)景說(shuō)明:
當(dāng)單臺(tái)后端服務(wù)器難以承載大量流量時(shí),可以用Nginx將請(qǐng)求分發(fā)到多臺(tái)后端服務(wù)器,實(shí)現(xiàn)負(fù)載均衡,提升系統(tǒng)穩(wěn)定性和響應(yīng)速度。
配置示例:
假設(shè)后端有兩臺(tái)服務(wù)器,IP分別為192.168.1.101:8080
和192.168.1.102:8080
。
- upstream backend_servers {
- server 192.168.1.101:8080 weight=3;
- server 192.168.1.102:8080 weight=1;
- }
-
- server {
- listen 80;
- server_name example.com;
-
- location /{
- proxy_pass http://backend_servers;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
重點(diǎn)解析:
upstream
定義后端服務(wù)器組,支持權(quán)重調(diào)節(jié)、健康檢查(通過(guò)第三方模塊或Nginx Plus)。- 通過(guò)
proxy_pass
指向負(fù)載均衡組。 - 權(quán)重參數(shù)(weight)控制請(qǐng)求在各服務(wù)器間的分配比例。
使用價(jià)值:
適合高并發(fā)場(chǎng)景,提升后端服務(wù)彈性和容錯(cuò)能力。
動(dòng)靜分離反向代理配置
場(chǎng)景說(shuō)明:
前端項(xiàng)目大量包含靜態(tài)資源(如圖片、CSS、JS),而動(dòng)態(tài)請(qǐng)求由后端程序處理。
通過(guò)Nginx配置動(dòng)靜分離,靜態(tài)資源直接由Nginx處理,提升訪問(wèn)速度,減輕后端壓力。
配置示例:
項(xiàng)目目錄中/static
存放靜態(tài)資源,后端應(yīng)用監(jiān)聽(tīng)127.0.0.1:8080
。
- server {
- listen 80;
- server_name example.com;
-
- # 靜態(tài)資源請(qǐng)求直接由Nginx處理
- location /static/{
- root /var/www/html;
- expires 30d;
- add_header Cache-Control"public";
- }
-
- # 動(dòng)態(tài)請(qǐng)求反向代理至后端應(yīng)用
- location /{
- proxy_pass http://127.0.0.1:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
重點(diǎn)解析:
/static/
路徑下靜態(tài)資源通過(guò)root
指令直接從本地磁盤(pán)讀取,開(kāi)啟瀏覽器緩存。- 根路徑其余請(qǐng)求全部轉(zhuǎn)發(fā)至后端處理。
- 動(dòng)靜分離減少網(wǎng)絡(luò)請(qǐng)求和后端負(fù)載。
使用價(jià)值:
提升資源加載性能,改善用戶(hù)體驗(yàn),降低后端服務(wù)器運(yùn)行壓力。
閱讀原文:原文鏈接
該文章在 2025/7/2 0:31:12 編輯過(guò)