1. 程式人生 > 其它 >Nginx+Tomcat實現負載均衡與動靜分離

Nginx+Tomcat實現負載均衡與動靜分離

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之間進行切換訪問。