Nginx+Tomcat實現負載均衡、動靜分離的原理解析
一、Nginx 負載均衡實現原理
1、Nginx 實現負載均衡是通過反向代理實現
反向代理(Reverse Proxy) 是指以 代理服務器(例:Nginx) 來接受 internet 上的連接請求,然後將請求轉發給內部網絡上的服務器(例:Tomcat),並將從服務器上得到的結果返回給 internet 上請求連接的客戶端,此時代理服務器(例:Nginx)對外就表現為一個反向代理服務器。
我們從客戶端的視野來看,實際上客戶端並不知道真實的服務提供者是哪臺服務器,它隻知道它請求瞭反向代理服務器。因此反向代理這種方式又對外隱藏瞭真實服務器的地址,從一定程度上降低瞭安全隱患。
2、Nginx 配置反向代理的主要參數 upstream 服務池名 {}
作用:配置後端服務器池,以提供響應數據
proxy_pass http:// 服務池名
作用:配置將訪問請求轉發給後端服務器池的服務器處理
二、Nginx 動靜分離實現原理
1、動靜分離原理
服務端接收來自客戶端的請求中,既有靜態資源也有動態資源,靜態資源由 Nginx 提供服務,動態資源由 Nginx 轉發至後端。
2、Nginx 靜態處理優勢
Nginx 處理靜態頁面的效率遠高於 Tomcat 的處理能力
若 Tomcat 的請求量為1000次,則 Nginx 的請求量為6000次
Tomcat 每秒的吞吐量為0.6M,Nginx 的每秒吞吐量為3.6M
Nginx 處理靜態資源的能力是 Tomcat 處理的6倍
三、Nginx + Tomcat 動靜分離、負載均衡配置步驟 環境準備
主機 | 操作系統 | IP地址 | 所需軟件 |
---|---|---|---|
Nginx Server | CentOS7 | 192.168.109.7 | nginx-1.12.0.tar.gz |
Tomcat Server1 | CentOS7 | 192.168.109.22 | apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm |
Tomcat Server2 | CentOS7 | 192.168.109.23 | apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm |
1、部署 Nginx 負載均衡服務器
#!/bin/bash #腳本說明:編譯安裝nginx服務 #註意:使用前請將nginx-1.12.0.tar.gz放入/opt目錄下 #關閉防火墻 systemctl stop firewalld systemctl disable firewalld setenforce 0 #安裝所需開發包和編譯環境、編譯器 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make #創建程序用戶,便於準確控制訪問 useradd -M -s /sbin/nologin nginx #解壓安裝包 cd /opt tar zxvf nginx-1.12.0.tar.gz -C /opt/ #編譯安裝nginx;指定安裝路徑、指定用戶名、組名、啟用模塊以支持統計狀態 cd /opt/nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module 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 restart nginx.service systemctl enable nginx.service
2、部署兩臺 Tomcat 應用服務器
#!/bin/bash #安裝Tomcat服務 #關閉防火墻 systemctl stop firewalld systemctl disable firewalld setenforce 0 #安裝JDK cd /opt rpm -ivh jdk-8u201-linux-x64.rpm #設置JDK環境變量 echo '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' > /etc/profile.d/java.sh source /etc/profile #安裝並啟動Tomcat cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat /usr/local/tomcat/bin/startup.sh
3、動靜分離配置
請看tomcat
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:www.test1.com");%> </body> </html>
#修改配置文件 vim /usr/local/tomcat/conf/server.xml <Host name="192" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" /> </Host> /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/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("動態頁面 1:www.test2.com");%> </body> </html>
#修改配置文件 vim /usr/local/tomcat/conf/server.xml <Host name="192" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" /> </Host> /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
3)Nginx server 配置
#準備靜態頁面和靜態圖片 echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html mkdir /usr/local/nginx/html/long cd /usr/local/nginx/html/long
vim /usr/local/nginx/conf/nginx.conf ...... http { ...... #gzip on; upstream tomcat_server { server 192.168.109.22:8080 weight=1; server 192.168.109.23:8080 weight=1; } server { listen 80; server_name www.long.com; #charset koi8-r; #access_log logs/host.access.log main; #配置Nginx處理動態頁面請求,將 .jsp 文件請求轉發到Tomcat 服務器處理 location ~ .*\.jsp$ { proxy_pass http://tomcat_server; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #配置Nginx處理靜態圖片請求 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { root /usr/local/nginx/html/img/; expires 10d; } location / { root html; index index.html index.htm; } systemctl restart nginx.service
4、訪問測試
測試靜態頁面效果
瀏覽器訪問 http://192.168.109.7/
瀏覽器訪問 http://192.168.109.7/long.jpg
測試負載均衡效果,不斷刷新瀏覽器測試
瀏覽器訪問 http://192.168.109.7/test/index.jsp
到此這篇關於Nginx+Tomcat實現負載均衡、動靜分離的原理解析的文章就介紹到這瞭,更多相關Nginx負載均衡、動靜分離內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Nginx+Tomcat負載均衡及動靜分離群集的實現
- Nginx負載均衡以及動靜分離的原理與配置
- Nginx+Tomcat負載均衡集群的實現示例
- nginx七層負載均衡配置詳解
- Nginx配置Https安全認證的實現