nginx+tomcat動靜分離、負載均衡

一、理論
nginx用于處理靜態頁面以及做調度器,tomcat用于處理動態頁面

lvs(四層)
輪詢(rr)
加權輪詢(wrr)
最小連接(lc)
加權最小連接(wlc)

nginx(四層、七層)
輪詢(rr)
最小連接(leastconn)
ip哈希(ip_hash)

haproxy(四層、七層)
輪詢(roundrobin)
加權輪詢(static-rr)
最小連接(leastconn)
源地址哈希(source)

調度器和代理服務器的區別
代理服務器:客戶端的請求和服務器的應答都通過代理服務器來傳輸。

調度器:
?? ?NAT ?客戶端的請求和服務器的應答都通過代理服務器來傳輸。
?? ?DR ? 客戶端的請求通過調度器傳輸,服務器直接應答給客戶端,不經過調度器。
?? ?TUN ?客戶端的請求通過調度器傳輸,服務器直接應答給客戶端,不經過調度器。
?

二、實踐

1、實驗環境
tomcat1 192.168.10.101
tomcat2 192.168.10.102
nginx 	192.168.10.103
2、過程
[root@tomcat1 ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.8.tar.gz  jdk-8u102-linux-x64.rpm
[root@tomcat1 ~]# java -version
-bash: java: 未找到命令
[root@tomcat1 ~]# dnf -y install jdk-8u102-linux-x64.rpm 
[root@tomcat1 ~]# java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@tomcat1 ~]# tar xf apache-tomcat-9.0.8.tar.gz 
[root@tomcat1 ~]# mv apache-tomcat-9.0.8/ /usr/local/tomcat9
[root@tomcat1 ~]# /usr/local/tomcat9/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat9
Using CATALINA_HOME:   /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat1 ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2401/java   
[root@tomcat1 ~]# mkdir -pv /web/webapp1
mkdir: 已創建目錄 '/web'
mkdir: 已創建目錄 '/web/webapp1'
[root@tomcat1 ~]# cat /web/webapp1/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.ooos.com");%> </body>
<body>
<div>靜態頁面的圖片1 </div><br><img src="logo.png">
</body></html>[root@tomcat1 ~]# vim /usr/local/tomcat9/conf/server.xml<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">……略<Context docBase="/web/webapp1" path="" reloadable="false"></Context></Host>
[root@tomcat1 ~]# /usr/local/tomcat9/bin/shutdown.sh
[root@tomcat1 ~]# /usr/local/tomcat9/bin/startup.sh[root@tomcat2 ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.8.tar.gz  jdk-8u102-linux-x64.rpm
[root@tomcat2 ~]# java -version
-bash: java: 未找到命令
[root@tomcat2 ~]# dnf -y install jdk-8u102-linux-x64.rpm 
[root@tomcat2 ~]# java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@tomcat2 ~]# tar xf apache-tomcat-9.0.8.tar.gz 
[root@tomcat2 ~]# mv apache-tomcat-9.0.8/ /usr/local/tomcat9
[root@tomcat2 ~]# /usr/local/tomcat9/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat9
Using CATALINA_HOME:   /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat2 ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2401/java   
[root@tomcat2 ~]# mkdir -pv /web/webapp1
mkdir: 已創建目錄 '/web'
mkdir: 已創建目錄 '/web/webapp1'
[root@tomcat2 ~]# cat /web/webapp1/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.sooo.com");%> </body>
<body>
<div>靜態頁面的圖片2 </div><br><img src="logo.png">
</body></html>[root@tomcat2 ~]# vim /usr/local/tomcat9/conf/server.xml<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">……略<Context docBase="/web/webapp1" path="" reloadable="false"></Context></Host>
[root@tomcat2 ~]# /usr/local/tomcat9/bin/shutdown.sh
[root@tomcat2 ~]# /usr/local/tomcat9/bin/startup.sh[root@nginx ~]# dnf -y install gcc* make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker
[root@nginx ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# ls
anaconda-ks.cfg  logo.png  nginx-1.26.3.tar.gz
[root@localhost ~]# tar zxf nginx-1.26.3.tar.gz 
[root@localhost ~]# cd nginx-1.26.3
[root@localhost nginx-1.26.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-pcre
[root@localhost nginx-1.26.3]# make -j$(nproc) && make install[root@localhost nginx-1.26.3]# cat /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>靜態頁面</title>
<style>
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>靜態頁面</h1>
<p>這是個靜態頁面</p>
</body>
</html>
[root@localhost nginx-1.26.3]# vim /usr/local/nginx/conf/nginx.conf
http {……略
upstream tomcat_server {server 192.168.10.101:8080 weight=1;server 192.168.10.102:8080 weight=1;
}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location ~.*.jsp$ {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://tomcat_server;}注: 	~是匹配規則 用于正則url前,表示url包含正則表達式,區分大小寫。.*兩者組合表示匹配任意個字符串, .表示匹配除換行外任意一個字符串,*表示匹配0個或多個字符串。. 表示匹配除換行外任意一個字符串。jsp$ 表示匹配以jsp結尾的。proxy_set_header HOST $host;+ proxy_set_header表示設置請求頭,HOST是變量名,$host是變量值,$host是nginx內置的函數,用于表示請求的虛擬主機。該值會封裝在請求頭中,用于請求tomcat中的具體虛擬主機。(該參數僅在后端服務器是tomcat時添加,因為tomcat中使用<Host></Host>標簽符來表示虛擬主機,傳遞給tomcat時,tomcat通過該請求頭就能知道客戶端請求的是哪個虛擬主機,給它提供服務。如果不添加,訪問網站會顯示400 bad request。)proxy_set_header X-Real-IP $remote_addr; proxy_set_header表示設置請求頭,X-Real-IP是變量名, $remote_addr是變量值,$remote_addr是nginx內置的函數,用于表示客戶端的ip地址。 該值用于傳遞給tomcat使用,客戶端通過代理訪問tomcat,在tomcat上更改日志設置,即可在tomcat的訪問日志中會顯示客戶端的真實IP地址。proxy_set_header Client-IP $remote_addr;  proxy_set_header表示設置請求頭,Client-ip是變量名 $remote_addr是變量值,$remote_addr是nginx內置的函數,用于表示客戶端的IP地址。該值會封裝在請求頭中,交給代理服務器使用。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  proxy_set_header表示設置請求頭,X-Forwarded-For是變量名,$proxy_add_x_forwarded_for是變量值,$proxy_add_x_forwarded_for是nginx內置的函數,用于將客戶端的ip地址傳遞給后端真實服務器。在多層代理中(例如,nginx01代理四層,nginx02代理七層,nginx01將請求發送給nginx02,nginx02再將請求發送給后端真實服務器)需要獲取客戶端的真實ip,就加上該參數即可。該參數會逐級傳遞客戶端的真實ip。location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {root /usr/local/nginx/html/img;expires 30d;}注:expires 設置緩存,30d表示緩存30天。location / {root   html;index  index.html index.htm;}
}
}[root@localhost ~]# mkdir /usr/local/nginx/html/img
[root@localhost ~]# cp logo.png /usr/local/nginx/html/img/
[root@localhost ~]# /usr/local/nginx/sbin/nginx 
[root@localhost sbin]# curl 192.168.10.103
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>靜態頁面</title>
<style>
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>靜態頁面</h1>
<p>這是個靜態頁面</p>
</body>
</html>
[root@localhost sbin]# curl 192.168.10.103/index.jsp<html>
<head>
<title>JSP test1 page</title> </head>
<body>
動態頁面1,http://www.ooos.com</body>
<body>
<div>靜態頁面的圖片1 </div><br><img src="logo.png">
</body></html>[root@localhost sbin]# curl 192.168.10.103/index.jsp<html>
<head>
<title>JSP test1 page</title> </head>
<body>
動態頁面2,http://www.sooo.com</body>
<body>
<div>靜態頁面的圖片2 </div><br><img src="logo.png">
</body></html>tomcat server.xmlpattern="%{X-Real-IP}i"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是AI芯片?

首先&#xff0c;我們要了解一下&#xff1a;什么是芯片&#xff1f;芯片的本質就是在半導體襯底上制作能實現一系列特定功能的集成電路。 其次&#xff0c;來看一下AI的概念。AI是研究如何使計算機能夠模擬和執行人類智能任務的科學和技術領域&#xff0c;致力于開發能夠感知…

PostgreSQL數據庫配置SSL操作說明書

背景&#xff1a; 因為postgresql或者mysql目前通過docker安裝&#xff0c;只需要輸入主機IP、用戶名、密碼即可訪問成功&#xff0c;這樣其實是不安全的&#xff0c;可能會通過一些手段獲取到用戶名密碼導致數據被竊取。而ES、kafka等也是通過用戶名/密碼方式連接&#xff0c;…

k8s更新證書

[rootk8s-master01 ~]# sudo kubeadm certs renew all [renew] Reading configuration from the cluster… [renew] FYI: You can look at this config file with ‘kubectl -n kube-system get cm kubeadm-config -o yaml’ certificate embedded in the kubeconfig file for…

正點原子lwIP協議的學習筆記

正點原子lwIP協議的學習筆記 正點原子lwIP學習筆記——lwIP入門 正點原子lwIP學習筆記——MAC簡介 正點原子lwIP學習筆記——PHY芯片簡介 正點原子lwIP學習筆記——以太網DMA描述符 正點原子lwIP學習筆記——裸機移植lwIP 正點原子lwIP學習筆記——裸機lwIP啟動流程 正點…

MongoTemplate常用api學習

本文只介紹常用的api&#xff0c;盡量以最簡單的形式學會mongoTemplate基礎api的使用 一、新增 主要包含三個api&#xff1a;insert&#xff08;一個或遍歷插多個&#xff09;、insertAll&#xff08;批量多個&#xff09;、save&#xff08;插入或更新&#xff09; //這里簡…

006網上訂餐系統技術解析:打造高效便捷的餐飲服務平臺

網上訂餐系統技術解析&#xff1a;打造高效便捷的餐飲服務平臺 在數字化生活方式普及的當下&#xff0c;網上訂餐系統成為連接餐飲商家與消費者的重要橋梁。該系統以菜品分類、訂單管理等模塊為核心&#xff0c;通過前臺展示與后臺錄入的分工協作&#xff0c;為管理員和會員提…

網絡攻防技術五:網絡掃描技術

文章目錄 一、網絡掃描的基礎概念二、主機發現三、端口掃描1、端口號2、端口掃描技術3、端口掃描隱秘策略 四、操作系統識別五、漏洞掃描六、簡答題1. 主機掃描的目的是什么&#xff1f;請簡述主機掃描方法。2. 端口掃描的目的是什么&#xff1f;請簡述端口掃描方法及掃描策略。…

生成JavaDoc文檔

生成 JavaDoc 文檔 1、快速生成 文檔 注解 2、常見的文檔注解 3、腳本生成 doc 文檔 4、IDEA工具欄生成 doc 文檔 第一章 快速入門 第01節 使用插件 在插件工具當中&#xff0c;找到插件 javaDoc 使用方式&#xff0c;在代碼區域&#xff0c;直接點擊右鍵。選擇 第02節 常用注…

大數據-276 Spark MLib - 基礎介紹 機器學習算法 Bagging和Boosting區別 GBDT梯度提升樹

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; 大模型篇章已經開始&#xff01; 目前已經更新到了第 22 篇&#xff1a;大語言模型 22 - MCP 自動操作 FigmaCursor 自動設計原型 Java篇開…

【HarmonyOS 5】如何優化 Harmony-Cordova 應用的性能?

以下是針對 ?Harmony-Cordova 應用性能優化?的完整方案&#xff0c;結合鴻蒙原生特性和Cordova框架優化策略&#xff1a; ??一、渲染性能優化? ?減少布局嵌套層級? 使用扁平化布局&#xff08;如 Grid、GridRow&#xff09;替代多層 Column/Row 嵌套&#xff0c;避免冗…

數據庫管理-第332期 大數據已死,那什么當立?(20250602)

數據庫管理332期 2025-06-02 數據庫管理-第332期 大數據已死&#xff0c;那什么當立&#xff1f;&#xff08;20250602&#xff09;1 概念還是技術2 必然的大數據量3 離線到實時4 未來總結 數據庫管理-第332期 大數據已死&#xff0c;那什么當立&#xff1f;&#xff08;202506…

相機--RGBD相機

教程 分類原理和標定 原理 視頻總結 雙目相機和RGBD相機原理 作用 RGBD相機RGB相機深度&#xff1b; RGB-D相機同時獲取兩種核心數據&#xff1a;RGB彩色圖像和深度圖像&#xff08;Depth Image&#xff09;。 1. RGB彩色圖像 數據格式&#xff1a; 標準三通道矩陣&#…

神經符號集成-三篇綜述

講解三篇神經符號集成的綜述&#xff0c;這些綜述沒有針對推薦系統的&#xff0c;所以大致過一下&#xff0c;下一篇帖子會介紹針對KG的兩篇綜述。綜述1關注的是系統集成和數據流的宏觀模式“是什么”&#xff1b;綜述3關注的是與人類理解直接相關的中間過程和決策邏輯的透明度…

window/linux ollama部署模型

模型部署 模型下載表: deepseek-r1 win安裝ollama 注意去官網下載ollama,這個win和linux差別不大,win下載exe linux安裝ollama 采用docker方式進行安裝: OLLAMA_HOST=0.0.0.0:11434 \ docker run -d \--gpus all \-p 11434:11434 \--name ollama \-v ollama:/root/.ol…

計算A圖片所有顏色占B圖片紅色區域的百分比

import cv2 import numpy as npdef calculate_overlap_percentage(a_image_path, b_image_path):# 讀取A組和B組圖像a_image cv2.imread(a_image_path)b_image cv2.imread(b_image_path)# 將圖像從BGR轉為HSV色彩空間&#xff0c;便于顏色篩選a_hsv cv2.cvtColor(a_image, c…

每日算法 -【Swift 算法】盛最多水的容器

盛最多水的容器&#xff1a;Swift 解法與思路分析 &#x1f4cc; 問題描述 給定一個長度為 n 的整數數組 height&#xff0c;每個元素表示在橫坐標 i 處的一條垂直線段的高度。任意兩條線段和 x 軸構成一個容器&#xff0c;該容器可以裝水&#xff0c;水量的大小由較短的那條…

云原生安全基礎:Linux 文件權限管理詳解

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 在云原生環境中&#xff0c;Linux 文件權限管理是保障系統安全的核心技能之一。無論是容器化應用、微服務架構還是基礎設施即代碼&#xff08;IaC&#xf…

TypeScript 中的字面量類型(Literal Types)

在 TypeScript 中&#xff0c;字面量類型&#xff08;Literal Types&#xff09;是一種特殊的類型&#xff0c;它允許你將變量的類型限制為某個具體的值&#xff08;如特定的字符串、數字或布爾值&#xff09;&#xff0c;而不僅僅是寬泛的類型&#xff08;如 string、number&a…

晶臺光耦在手機PD快充上的應用

光耦&#xff08;光電隔離器&#xff09;作為關鍵電子元件&#xff0c;在手機PD快充中扮演信號隔離與傳輸的“安全衛士”。其通過光信號實現電氣隔離&#xff0c;保護手機電路免受高電壓損害&#xff0c;同時支持實時信號反饋&#xff0c;優化充電效率。 晶臺品牌推出KL817、KL…

python學習打卡day43

DAY 43 復習日 作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 浙大疏錦行 數據集使用貓狗數據集&#xff0c;訓練集中包含貓圖像4000張、狗圖像4005張。測試集包含貓圖像1012張&#xff0c;狗圖像1013張。以下是數據集的下…