Nginx+Tomcat實現負載均衡與動靜分離
阿新 • • 發佈:2022-03-20
Nginx+Tomcat實現負載均衡與動靜分離
一、Nginx負載均衡和動靜分離
1、Nginx 實現負載均衡是通過反向代理實現
反向代理(Reverse Proxy) 是指以 代理伺服器(例:Nginx) 來接受 internet 上的連線請求,然後將請求轉發給內部網路上的伺服器(例:Tomcat),並將從伺服器上得到的結果返回給 internet 上請求連線的客戶端,此時代理伺服器(例:Nginx)對外就表現為一個反向代理伺服器。 我們從客戶端的視野來看,實際上客戶端並不知道真實的服務提供者是哪臺伺服器,它只知道它請求了反向代理伺服器。因此反向代理這種方式又對外隱藏了真實伺服器的地址,從一定程度上降低了安全隱患。
2、Nginx配置反向代理主要引數
配置後端伺服器池,以提供響應資料
upstream 伺服器名 {}
配置將訪問請求轉發給後端伺服器池名
proxy_pass http://伺服器名
3、Nginx靜態處理優勢
Nginx處理靜態頁面的效率遠高於Tomcat的處理能力
若Tomcat的請求量為1000次,則Nginx的請求量為6000次
Tomcat每秒的吞吐量為0.6M,Nginx的每秒吞吐量為3 .6M
Nginx處理靜態資源的能力是Tomcat處理的6倍
二,nginx + tomcat 部署
環境: nginx 192.168.10.11 tomcat1 192.168.10.12 tomcat2 192.168.10.13
1、Nginx伺服器配置
編輯指令碼 #!/bin/bash #編譯安裝nginx服務,使用本指令碼前請將相應的安裝包放入/opt目錄下 #安裝所需開發包和編譯環境、編譯器 yum -y install pcre-devel zlib-devel gcc gcc-c++ make #建立程式使用者,便於準確控制訪問 useradd -M -s /sbin/nologin nginx #解壓安裝包 cd /opt tar zxvf nginx-1.12.0.tar.gz -C /opt/ #指定安裝路徑、指定使用者名稱和組名 cd nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #編譯及安裝 make && make install #軟連結便於系統識別nginx操作命令 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #新增nginx系統服務 echo '[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecrReload=/bin/kill -s HUP $MAINPID ExecrStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target' > /lib/systemd/system/nginx.service #賦權及開啟服務、開啟開機自啟 chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctl enable nginx.service
2、部署2臺Tomcat 應用伺服器
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
###載入生效、檢視版本
source /etc/profile.d/java.sh
java -version
3、安裝啟動 Tomcat
① 解壓apache-tomcat軟體包
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##啟動tomcat##
#優化管理
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#開啟服務
startup.sh
netstat -natp | grep 8080
3.動靜分離配置
1、Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp #動態頁面的配置
<%@ 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>
#新增虛擬主機配置
vim /usr/local/tomcat/conf/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" /> #新增
---》wq
shutdown.sh
startup.sh
2、Tomcat2 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp #動態頁面的配置
<%@ 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>
#配置虛擬主機
vim /usr/local/tomcat/conf/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" /> #新增
#重啟服務
shutdown.sh
startup.sh
4.Nginx server 配置
準備靜態頁面
echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html
cd /usr/local/nginx/html/img/
#上傳一張圖片到此目錄下
[root@localhost img]#ls
cat.jpg
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置負載均衡的伺服器列表,weight引數表示權重,權重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.10.12:8080 weight=1;
server 192.168.10.13:8080 weight=1;
}
server {
listen 80;
server_name www.ceshi.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#配置Nginx處理動態頁面請求,將 .jsp 檔案請求轉發到Tomcat 伺服器處理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
#設定後端的 Web 伺服器可以獲取遠端客戶端的真實IP #設定後端的Web伺服器接收到的請求訪問的主機名(域名或IP、埠),預設host的值為proxy_pass指令設定的主機名
proxy_set_header HOST $host;
#把$remote_addr賦值給X-Real-IP(自定義),來獲取源IP
proxy_set_header X-Real-IP $remote_addr;
#在Nginx作為代理伺服器時,設定的IP列表,會把經過的機器ip,代理機器ip都記錄下來
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root html;
index index.html index.htm;
}
訪問 http://192.168.10.11,會出現Nginx的靜態頁面
而訪問 http://192.168.10.11/index.jsp 時,會動態的在Tomcat1和Tomcat2之間進行切換訪問。