Nginx反向代理與負載均衡部署實戰指南
- 前言
- 一、規劃部署負載均衡和反向代理
- 二、部署Nginx負載均衡器
- 2.1. 準備基礎環境
- 2.2. 創建Nginx運行用戶
- 2.3. 編譯安裝Nginx
- 2.4. 配置Nginx系統服務
- 2.5. 驗證Nginx安裝
- 三、部署后端2臺Tomcat應用服務器
- 3.1. 安裝JDK
- 3.2. 部署Tomcat實例1
- 3.3. 部署Tomcat實例2
- 四、動靜分離配置
- 4.1. 配置Tomcat1的動態頁面
- 4.2. 配置Tomcat2的動態頁面
- 4.3. 配置Nginx的動靜分離
- 五、測試效果
- 5.1. 測試靜態頁面
- 5.2. 測試靜態圖片
- 5.3. 測試負載均衡
- 結語
前言
??在現代Web架構中,高可用性和高性能是企業應用的核心需求。隨著用戶量和業務量的增長,單臺服務器往往難以承受高并發請求,容易成為性能瓶頸。此時,反向代理與負載均衡技術成為解決問題的關鍵——通過將請求分發到多臺后端服務器,既能提升系統的整體處理能力,又能隱藏后端服務器的真實IP,增強安全性。本教程將詳細介紹如何使用Nginx搭建反向代理與負載均衡集群,結合Tomcat實現動靜分離,為企業應用打造穩定、高效的Web服務環境。
一、規劃部署負載均衡和反向代理
在開始部署前,需明確各服務器的角色與IP地址,確保網絡環境暢通:
- Nginx負載均衡器:作為前端入口,負責接收客戶端請求并將請求分發到后端Tomcat服務器,IP地址為
192.168.10.10
,監聽端口80
。 - Tomcat應用服務器1:運行Java Web應用,IP地址為
192.168.10.11
,監聽端口8080
。 - Tomcat應用服務器2:運行Java Web應用,IP地址為
192.168.10.11
,監聽端口8081
(同一服務器部署多實例,模擬多臺服務器場景)。
通過這種架構,Nginx作為“流量調度中心”,將客戶端請求均勻分發到后端Tomcat服務器,既提升了系統的并發處理能力,又降低了單臺服務器的壓力。
二、部署Nginx負載均衡器
Nginx的安裝與配置是搭建反向代理集群的第一步。以下是詳細步驟:
2.1. 準備基礎環境
首先關閉防火墻和SELinux,避免網絡訪問限制:
systemctl stop firewalld
setenforce 0
安裝Nginx所需的依賴包(用于編譯安裝):
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
2.2. 創建Nginx運行用戶
為保證安全性,Nginx以非root用戶身份運行:
useradd -M -s /sbin/nologin nginx
2.3. 編譯安裝Nginx
下載并解壓Nginx源碼包(以1.20.2
版本為例):
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
進入解壓目錄,配置編譯選項:
cd /opt/nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \ # 安裝目錄
--user=nginx \ # 運行用戶
--group=nginx \ # 運行組
--with-file-aio \ # 啟用文件異步IO(提升靜態文件處理性能)
--with-http_stub_status_module \ # 啟用狀態統計模塊(查看Nginx運行狀態)
--with-http_gzip_static_module \ # 啟用gzip靜態壓縮(減少傳輸體積)
--with-http_flv_module \ # 啟用FLV視頻偽流支持
--with-http_ssl_module \ # 啟用SSL模塊(支持HTTPS)
--with-stream \ # 啟用stream模塊(支持四層負載均衡)
make && make install # 編譯并安裝
2.4. 配置Nginx系統服務
為了讓Nginx隨系統啟動自動運行,需創建systemd服務文件:
vim /lib/systemd/system/nginx.service
添加以下內容(關鍵參數說明見注釋):
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
設置服務權限并啟動Nginx:
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service # 設置開機自啟
2.5. 驗證Nginx安裝
在瀏覽器中訪問http://192.168.10.10
,若出現Nginx歡迎頁面,說明安裝成功。
三、部署后端2臺Tomcat應用服務器
Tomcat作為Java Web應用服務器,需部署兩個實例以實現負載均衡的目標。以下是詳細步驟:
3.1. 安裝JDK
Tomcat依賴JDK運行,首先安裝JDK 8:
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
配置JDK環境變量:
vim /etc/profile
添加以下內容:
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使環境變量生效:
source /etc/profile
3.2. 部署Tomcat實例1
解壓Tomcat源碼包:
tar zxvf apache-tomcat-8.5.16.tar.gz
移動到指定目錄并重命名:
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
啟動Tomcat并驗證端口:
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -ntap | grep 8080 # 檢查8080端口是否監聽
3.3. 部署Tomcat實例2
復制Tomcat實例1的目錄,創建第二個實例:
cp -r /usr/local/tomcat /usr/local/tomcat1
修改Tomcat實例2的端口(避免與實例1沖突):
編輯/usr/local/tomcat1/conf/server.xml
,修改以下端口:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Server port="8006" shutdown="SHUTDOWN" />
啟動Tomcat實例2并驗證端口:
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
netstat -ntap | grep 8081 # 檢查8081端口是否監聽
四、動靜分離配置
??動靜分離是提升Web性能的關鍵策略,通過將靜態資源(如HTML、CSS、JS、圖片)與動態資源(如JSP、Servlet)分開處理,減少Tomcat的負載壓力。以下是具體配置:
4.1. 配置Tomcat1的動態頁面
創建動態頁面目錄并編寫JSP文件:
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
添加以下內容(顯示動態頁面1的信息):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("動態頁面 1,http://www.test1.com");%>
</body>
</html>
修改Tomcat1的server.xml
,配置虛擬主機:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>
重啟Tomcat1:
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
4.2. 配置Tomcat2的動態頁面
復制Tomcat1的動態頁面目錄,修改內容(當前tomcat為同一服務器):
mkdir /usr/local/tomcat/tomcat1/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
添加以下內容(顯示動態頁面2的信息):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("動態頁面 2,http://www.test2.com");%>
</body>
</html>
修改Tomcat2的server.xml
,配置虛擬主機:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
重啟Tomcat2:
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
4.3. 配置Nginx的動靜分離
編輯Nginx的主配置文件:
vim /usr/local/nginx/conf/nginx.conf
在http
塊中添加upstream
(負載均衡服務器池)和動靜分離配置:
http {# 定義負載均衡服務器池(權重可根據服務器性能調整)upstream tomcat_server {server 192.168.10.11:8080 weight=1;server 192.168.10.11:8081 weight=1;}server {listen 80;server_name www.kgc.com;charset utf-8;# 動態請求轉發到Tomcat集群 {~ .*\,jsp$(匹配大小寫)|~*\.jsp$(不匹配大小寫)}location ~ .*\.jsp$ {proxy_pass http://tomcat_server;proxy_set_header Host $host; # 傳遞客戶端請求的Host頭proxy_set_header X-Real-IP $remote_addr; # 傳遞客戶端真實IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 傳遞代理鏈IP}# 靜態圖片請求(直接由Nginx處理,提升性能)location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d; # 設置靜態資源緩存時間(10天)}# 靜態頁面請求location / {root html;index index.html index.htm;}}
}
檢查Nginx配置語法并重啟:
/usr/local/nginx/sbin/nginx -t # 檢查配置是否正確
systemctl restart nginx.service # 重啟Nginx
五、測試效果
5.1. 測試靜態頁面
??在瀏覽器中訪問http://192.168.10.10/
,若顯示Nginx的默認靜態頁面,說明靜態頁面配置成功。
5.2. 測試靜態圖片
??將圖片1.png
復制到/usr/local/nginx/html/img
目錄,訪問http://192.168.10.10/1.png
,若顯示圖片,說明靜態圖片配置成功。
5.3. 測試負載均衡
??在瀏覽器中反復訪問http://192.168.10.11/index.jsp
,若交替顯示“動態頁面 1”和“動態頁面 2”的內容,說明負載均衡配置成功(Nginx將請求分發到Tomcat1和Tomcat2)。
結語
??通過本教程的部署,我們成功搭建了Nginx反向代理與負載均衡集群,并結合Tomcat實現了動靜分離。這種架構不僅提升了Web應用的并發處理能力(Nginx處理靜態請求,Tomcat處理動態請求),還通過負載均衡將請求分發到多臺服務器,降低了單臺服務器的壓力,增強了系統的高可用性。
??在實際生產環境中,還可以進一步優化配置:如開啟Nginx的gzip壓縮(減少傳輸體積)、配置SSL證書(實現HTTPS加密)、設置健康檢查(自動剔除故障服務器)等。此外,結合Docker或Kubernetes等容器技術,可以實現更靈活的動態擴展,應對突發的流量高峰。
??反向代理與負載均衡是企業Web架構的核心組件,掌握其部署與配置技能,將為打造高性能、高可用的Web服務奠定堅實基礎。