环境准备
Nginx 服务器:192.168.41.21:80 Tomcat服务器1:192.168.41.22:80 Tomcat服务器2:192.168.41.10:8080 192.168.10.10:8081
部署Nginx 负载均衡器 192.168.41.21
#关闭防火墙和安全机制
systemctl stop firewalld
setenforce 0
#安装依赖
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
useradd -M -s /sbin/nologin nginx
#解压
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/
#配置
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream
#编译安装
make && make install
#将nginx以及其下的所有文件所属组和所属用户改为nginx
chown -R nginx.nginx /usr/local/nginx
#优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#./configure \
#--prefix=/usr/local/nginx \
#--user=nginx \
#--group=nginx \
#--with-file-aio \ #启用文件修改支持
#--with-http_stub_status_module \ #启用状态统计
#--with-http_gzip_static_module \ #启用 gzip静态压
#--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
#--with-http_ssl_module #启用 SSL模块,提供SSL加密功能
#--with-stream #启用 stream模块,提供4层调度
#Systemd服务配置文件,用于在系统启动时启动和管理后台服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
#创建目录,方便管理
mkdir -p /usr/local/nginx/run/
#修改配置文件
vim /usr/local/nginx/conf/nginx.conf
#找到 pid的位置修改
pid /usr/local/nginx/run/nginx.pid;
#赋权
chmod 754 /lib/systemd/system/nginx.service
#刷新
systemctl daemon-reload
systemctl start nginx.service
部署两台Tomcat 应用服务器
#关闭防火墙和安全机制
systemctl stop firewalld
setenforce 0
#解压jdk
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
#配置 Java 的环境变量
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
#安装和启动 Apache 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
netstat -ntap | grep 8080
动静分离配置
Tomcat1 server 配置 192.168.41.22
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test1 page #指定为 test1 页面
<% out.println("动态页面 1,http://www.test1.com");%>
vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
Tomcat2 server 配置 192.168.41.10
先配置多实例
cd /opt
#部署多个tomcat
mv /usr/local/tomcat/ /usr/local/tomcat1
mkdir /usr/local/tomcat
mv /usr/local/tomcat1 /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
#22行,修改Server prot,默认为8005 -> 修改为8006
修改为8081
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
#修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
#启动tomcat
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
#准备动态页面
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test2 page #指定为 test2 页面
<% out.println("动态页面 2,http://www.test2.com");%>
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test3 page #指定为 test3 页面
<% out.println("动态页面 3,http://www.test3.com");%>
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
Nginx server 配置
#准备静态页面和静态图片
echo '这是静态页面
' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/test.png /usr/local/nginx/html/img
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.41.22:8080 weight=1;
server 192.168.41.10:8080 weight=1;
server 192.168.41.10:8081 weight=1;
}
server {
listen 80;
server_name www.test.com;
charset utf-8;
#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;
}
#配置Nginx处理静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
:wq
location / {
root html;
index index.html index.htm;
}
......
}
......
}
systemctl restart nginx
测试效果
测试静态页面效果
浏览器访问 http://192.168.41.21/
浏览器访问 http://192.168.41.21/test.png
测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.41.21/index.jsp
动静分离是一种通过将动态内容和静态内容分别由不同的服务器处理以提高性能的策略。在 Nginx 和 Tomcat 的组合中,你可以使用 Nginx 处理静态内容,而将动态内容转发给 Tomcat 处理,从而实现动静分离。
以下是基本的步骤:
安装和配置 Nginx:
server {
listen 80;
server_name your_domain.com;
location / {
# 静态文件的路径
root /path/to/static/files;
index index.html index.htm;
}
location /app {
# 动态请求的代理
proxy_pass http://tomcat_server:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置 Tomcat:
配置 Tomcat,确保它监听一个不同于 Nginx 的端口,例如 8080
。 在 Tomcat 的 server.xml
文件中,修改
元素的 port
属性,使其监听 8080
端口。
重启服务:
sudo systemctl restart nginx
# 如果是使用 systemd 启动 Tomcat
sudo systemctl restart tomcat
现在,Nginx 将处理静态文件,而对于动态请求(例如通过 /app
路径的请求),Nginx 将把请求转发给 Tomcat 处理。这样可以充分利用 Nginx 的高性能来提供静态内容,同时使用 Tomcat 处理动态内容。确保替换上述示例中的占位符,使其适应你的具体情况。