NGINX负载均衡与反向代理
一:实现原理

正向代理:正向代理允许客户端通过它访问任意网站并且隐蔽客户端自身,因此你必须采取安全措施来确保仅为经过授权的客户端提供服务
反向代理:对外是透明的,访问者并不知道自己访问的是代理。对访问者而言,他以为访问的就是原始服务器(可以隐藏服务的真实地址
负载均衡有两种,一种在七层,一种在四层,七层是对外的,四层是对内的,在应用内访问。http协议都是七层
upstream 服务池名{} #配置后端服务池,以提供响应数据
proxy_pass http://服务池名 #配置将访问请求转发给后端服务池的服务器处理
(stream)
动静分离实现原理
服务端接收来自客户端的请求中,既有动态资源也有静态资源,静态资源由nginx提供服务,动态资源由nginx转发给后端(反向代理),及tomcat,简单来说就是nginx将动态资源和静态资源分开处理,可以提高nginx的处理能力

nginx静态处理的优势
1:nginx处理静态页面的效率远高于tomcat的处理能力
2:nginx处理静态资源的能力是tomcat处理的6倍
3:若tomcat的请求量为1000次,则nginx为6000次
4:tomcat每秒的吞吐量为0.6M,nginx则为3.6M

实验搭建反向代理与负载均衡
一,安装nginx和tomcat
这里就不一一显示了


都启动好了后,开始添加用户设置属主属组

useradd -s /sbin/nologin tomcat
chown tomcat:tomcat /usr/local/tomcat -R
新建服务文件
vim /etc/systemd/system/tomcat.service
将以下这段复制进去
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
重新加载服务,并查看服务是否启动
systemctl daemon-reload
systemctl start tomcat
netstat -ntlap |grep 8080

切换至webapps下,再新建目录
cd /usr/local/tomcat/webapps/
mkdir pxx

建立动态页面文件
vim qjm/index.jsp
将下面的话复制进去
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("666");%>
</body>
</html>
修改主配置文件
#备份一下
cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml.bak
vim /usr/local/tomcat/conf/server.xml
##164行下添加
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/pxx"
path="" reloadable="true" />
</Host>
先注释


再添加

重启服务,并在网页测试

tomcat服务器1配置
在tomcat的基础上,创建tomcat工作目录,并把软件包移动
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

配置tomcat环境变量
vim /etc/profile.d/tomcat.sh
tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

刷新系统
source /etc/profile.d/tomcat.sh
修改tomcat2中的server.xml文件,要求各tomcat实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN"> ##22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1" ##69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> ##116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010



修改添加内容的环境变量,修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
##tomcat1添加
##在二十行下添加插入
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat2/bin/startup.sh
##tomcat2添加
##在二十行下添加插入
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


启动tomcat中的/bin/startup.sh
/usr/local/tomcat/tomcat1/bin/startup.sh

/usr/local/tomcat/tomcat2/bin/startup.sh


查看是否开启
netstat -natp | grep java


tomcat动静分离配置
添加访问页面
mkdir /usr/local/tomcat/tomcat1/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

修改主配置文件,添加虚拟主机
依然是将148行至150行注销,160行至164行注销
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true">
</Context>
</Host>

关闭再开启
##关闭重启,tomcat配置完成
[root@localhost opt]# /usr/local/tomcat/tomcat1/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat/tomcat1
Using CATALINA_HOME: /usr/local/tomcat/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat1/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/tomcat1/bin/bootstrap.jar:/usr/local/tomcat/tomcat1/bin/tomcat-juli.jar
[root@localhost opt]# /usr/local/tomcat/tomcat1/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat/tomcat1
Using CATALINA_HOME: /usr/local/tomcat/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat1/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/tomcat1/bin/bootstrap.jar:/usr/local/tomcat/tomcat1/bin/tomcat-juli.jar
Tomcat started.

tomcat2服务器配置
动静分离配置
mkdir /usr/local/tomcat/tomcat2/webapps/test
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>

修改主配置文件,添加虚拟主机
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true">
</Context>
</Host>
关闭再启动,查看

Nginx+ Tomcat 负载均衡、反向代理、动静分离
实验环境
nginx服务器:192.168.179.15
tomcat1:192.168.179.7:8080
tomcat2:192.168.179.90:8080 192.168.179.90:8081
将上述环境都配置好之后,开始配置
设置静态页面
echo '<html><body><h1>this is jingtai page </h1></body></html>' > /usr/local/nginx/html/index.html

添加访问图片
cd /usr/local/nginx/html/
##拖入添加图片

配置nginx主配置文件
cd /usr/local/nginx/conf
vim nginx.conf
##配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
##33行下面加入以下内容
#gzip on;
upstream tomcat_server {
server 192.168.179.7:8080 weight=1;
server 192.168.179.90:8080 weight=1;
server 192.168.179.90:8081 weight=1;
}
##在45行下加入下面配置参数server下面配置,添加反向代理,动静分离
#access_log logs/host.access.log main;
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;
}
##添加参数解析
location ~ .*\.jsp$ {
#把nginx接收到的客户端的ip地址赋值给跳转到tomcat请求中的源ip,识别客户的真实ip,并且赋值与跳转
proxy_pass http://tomcat_server;
proxy_set_header HOST $host;
#设定后端的web服务器接收到的请求访问的主机名(域名或ip、端口),默认host的值为proxy_pass直连设置的主机名
proxy_set_header X-Real-IP $remote_addr;
#把$remote_addr复制给X-Real-IP(自定义),来回去源IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#在nginx最为代理服务器时,设置的IP列表,会把经过的及其ip,代理及其ip都记录下来
##主配置文件57行下添加下面配置参数,配置Nginx处理静态图片请求,让页面能够加载图片
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
设置权重

反向代理

添加匹配的图片类型

检查语法
nginx -t

重启验证


每个服务器都看下,测试负载均衡是否成功


本文详细介绍了如何利用Nginx实现正向代理和反向代理,以及负载均衡和动静分离。通过配置Nginx服务池、反向代理和负载均衡策略,结合Tomcat实例,展示了动静资源的分离处理,提高了系统性能。同时,通过调整Tomcat配置文件,创建了多个Tomcat实例,实现了负载均衡。最后,配置Nginx以处理静态页面并反向代理动态请求,确保了服务器的高效运行。

759

被折叠的 条评论
为什么被折叠?



