以下是最核心的反向代理實現步驟,專注于 “客戶端→Nginx 代理→后端服務” 的基礎轉發功能:
一、準備 2 臺服務器
角色 | IP 示例 | 需安裝軟件 |
---|---|---|
代理服務器 | 192.168.1.10 | Nginx |
后端服務器 | 192.168.1.11 | Nginx/Apache |
二、后端服務器配置(192.168.1.11)
安裝并啟動 Web 服務:
# 安裝Nginx yum install -y nginx # CentOS/RHEL # 或 apt install -y nginx # Ubuntu/Debian# 啟動服務 systemctl start nginx systemctl enable nginx
設置標識頁面(便于驗證):
echo "<h1>Backend Server: 192.168.1.11</h1>" > /usr/share/nginx/html/index.html
三、代理服務器配置(192.168.1.10)
安裝 Nginx:
yum install -y nginx # 同上
創建反向代理配置:
# 備份默認配置 mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak# 新建代理配置 cat > /etc/nginx/conf.d/proxy.conf << 'EOF' server {listen 80;server_name localhost;location / {# 轉發到后端服務器proxy_pass http://192.168.1.11:80;# 傳遞客戶端信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;} } EOF
啟動 Nginx:
# 檢查配置 nginx -t# 啟動服務 systemctl start nginx systemctl enable nginx
四、驗證反向代理
客戶端直接訪問后端:
瀏覽器打開?http://192.168.1.11
,顯示?Backend Server: 192.168.1.11
。通過代理服務器訪問:
瀏覽器打開?http://192.168.1.10
,同樣顯示后端頁面內容,說明代理成功。
五、核心驗證點
- 客戶端僅需知道代理服務器 IP(192.168.1.10),無需知道后端 IP
- 后端服務器日志中可看到客戶端真實 IP(而非代理服務器 IP)
以上步驟完成即實現了最基礎的反向代理功能,所有操作均圍繞 “請求轉發” 核心目標,去除了額外擴展配置。
location / {
? ? proxy_pass http://192.168.42.1;
}
? ? ?proxy_set_header Host $host; # 修改請求頭,添加Host字段
proxy_set_header X-Real-IP $remote_addr; # 修改請求頭,添加X-Real-IP字段
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 修改請求頭,添加X-Forwarded-For字段 client_max_body_size 10m; # 允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; # 緩沖區代理緩沖用戶端請求的最大字節數, proxy_connect_timeout 90; # nginx跟后端服務器連接超時時間\(代理連接超時\) proxy_send_timeout 90; # 后端服務器數據回傳時間\(代理發送超時\)
proxy_read_timeout 90; # 連接成功后,后端服務器響應時間\(代理接收超時\)
proxy_buffer_size 4k; # 設置代理服務器(nginx)保存用戶頭信息的緩沖區大小
proxy_buffers 4 32k; # proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 proxy_busy_buffers_size 64k; # 高負荷下緩沖大小(proxy_buffers*2) proxy_temp_file_write_size 64k; # 設定緩存文件夾大小,大于這個值,將從upstream服務器傳
負載均衡
模式(算法)
? ?輪詢(默認)(RR)Round Robin:將請求平均分配給所有服務器,
? ?最小連接數(Least Connections):該策略將請求分發給當前處理連接數最少的服務器,適合連接數波動較大的場景,如長連接服務。
? IP 哈希(IP Hash):通過請求的客戶端IP進行哈希運算,將來自同一IP地址的請求分發到同一臺服務器上,適合有會話保持需求的場景。
? 權重(Weight):為不同的服務器分配權重,Nginx 將根據設置的權重值來分發請求,權重越高的服務器將承擔更多的流量,適合服務器性能不均衡的場景
? ?
? ?
upstream web1{
? ? ?#默認輪詢
? ? ? ?server 192.168.x.x
? ? ? ?server 192.168.x.x
? ? ? ? ...
}
upstream wed2?{
# 最小連接數負載均衡算法 least_conn;
# 后端服務器列表
? ? ? ? ?server 192.168.1.100:80;
? ? ? ? ?server 192.168.1.101:80;
? ? ? ? ...
}
upstream wed3?{
ip_hash #ip哈希模式
# 后端服務器列表
? ? ? ? ?server 192.168.1.100:80;
? ? ? ? ?server 192.168.1.101:80;
? ? ? ? ...
}