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