Nginx 反向代理+负载均衡+动静分离整合 Tomcat
一、环境准备1. 服务器准备角色IP地址端口核心功能Nginx192.168.81.13380反向代理、负载均衡、静态资源处理Tomcat节点1192.168.81.1348080处理动态请求JSP/ServletTomcat节点2192.168.81.1358081处理动态请求JSP/Servlet静态资源存储192.168.81.133-存放HTML、图片、CSS等静态文件2. 临时关闭防火墙和selinux# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭selinux setenforce 0二、部署Nginx编译安装1. 安装编译依赖包pcre用于正则匹配zlib用于Gzip压缩openssl用于SSL加密yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c make2.创建Nginx用户Nginx专用用户无登录权限仅用于运行nginx进程提升安全性useradd -M -s /sbin/nologin nginx3.下载并解压源码包# 下载 cd /opt wget https://nginx.org/download/nginx-1.20.2.tar.gz # 解压 tar zxvf nginx-1.20.2.tar.gz -C /opt/4. 配置编译参数cd /opt/nginx-1.20.2 # 配置 ./configure --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-file-aio \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_flv_module \ --with-http_ssl_module \ --with-stream # 编译并安装 make make install5. 创建Nginx系统服务支持systemctl命令管理vim /lib/systemd/system/nginx.service # 添加系统服务配置 [Unit] Descriptionnginx Afternetwork.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s QUIT $MAINPID PrivateTmptrue [Install] WantedBymulti-user.target6. 设置权限并启动nginxchmod 777 /lib/systemd/system/nginx.service # 重新加载系统服务配置 systemctl daemon-reload systemctl start nginx.service systemctl enable nginx.service三、配置Nginx反向代理负载均衡动静分离编辑/usr/local/nginx/conf/nginx.conf实现“反向代理负载均衡动静分离”一体化配置user nginx; # 注意这里对后面的权限很关键。 ... http { include mime.types; default_type application/octet-stream; # 1. 定义Tomcat集群加权轮询故障转移备份节点 upstream tomcat_cluster { server 192.168.81.134:8080 weight1 max_fails3 fail_timeout30s; server 192.168.81.135:8081 weight2 max_fails3 fail_timeout30s; server 192.168.81.136:8080 backup; # 备份节点 } # 2. Nginx服务配置 server { listen 80; server_name 192.168.81.133; charset utf-8; gzip on; # 启用Gzip压缩 # 默认nginx访问页面这里我把index.html文件移到了/data/www/static目录下 location / { root /data/www/static; # 告诉 Nginx找不到后缀的文件也来这里找 index index.html index.htm; # 告诉 Nginx如果只访问 IP默认打开 index.html } # 3. 静态图片单独配置缓存10天 location ~ \.(jpg|png|jpeg)$ { root /data/www/static/img; expires 10d; access_log off; } # 4. 动静分离静态资源本地处理 location ~ \.(html|htm|gif|jpg|jpeg|css|js|bmp|swf)$ { root /data/www/static; # 静态资源目录 expires 30d; # 缓存30天 access_log off; # 关闭日志 } # 5. 反向代理负载均衡动态请求转发 location ~ \.(jsp|do|action)$ { proxy_pass http://tomcat_cluster; # 指向Tomcat集群 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30s; # 连接超时时间 proxy_read_timeout 60s; # 读取超时时间 } } }补充这里的只显示了主要的功能配置有一些默认的配置比如nginx的默认访问页面需要自行调整。若报错仔细思考配置文件里的内容当你找出问题所在相信你会对nginx的配置理解更上一层。四、Tomcat 应用部署1. 安装JDK# 下载 cd /opt wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz # 解压 tar zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/2. 配置环境变量vim /etc/profile # 环境变量 export JAVA_HOME/usr/local/jdk1.8.0_202 # JDK安装目录 export JRE_HOME${JAVA_HOME}/jre # JRE目录 export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib # 类路径指定JVM查找类文件的路径 export PATH${JAVA_HOME}/bin:$PATH # 将JDK二进制目录加入系统PATH全局可用Java命令 # 生效 source /etc/profile # 验证 java -version3. 安装并启动 Tomcat# 下载 cd /opt wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.75/bin/apache-tomcat-9.0.75.tar.gz # 解压 tar zxvf apache-tomcat-9.0.75.tar.gz -C /usr/local/ # 为了方便操作修改一下名字 mv apache-tomcat-9.0.75 tomcat9 # 启动tomcat cd /usr/local/tomcat9/bin ./startup.sh # 验证是否启动成功 ps -ef | grep tomcat # 查看进程 # 查看端口监听 netstat -tunlp | grep 8080补充如果要停止tomcat使用命令./shutdown.sh另外一个Tomcat节点同理。4.Tomcat 应用部署在两台Tomcat的/usr/local/tomcat/webapps/ROOT目录下分别创建测试JSP页面验证负载均衡Tomcat节点1192.168.81.134:8080cd /usr/local/tomcat9/webapps/ROOT # 备份默认页面 mv index.jsp index.jsp.bak添加测试内容vim index.jsp # 添加以下内容 % page languagejava importjava.util.* pageEncodingUTF-8% html headtitleJSP Test1 Page/title/head body % out.println(动态页面 1 - Tomcat Node1: 192.168.81.134:8080); % /body /html重启Tomcat节点1/usr/local/tomcat9/bin/shutdown.sh /usr/local/tomcat9/bin/startup.shTomcat节点2192.168.81.135:8081cd /usr/local/tomcat/webapps/ROOT # 备份默认页面 mv index.jsp index.jsp.bak添加测试内容vim index.jsp # 添加以下内容 % page languagejava importjava.util.* pageEncodingUTF-8% html headtitleJSP Test2 Page/title/head body % out.println(动态页面 2 - Tomcat Node1: 192.168.81.135:8081); % /body /html修改端点8080 - 8081cd /uar/local/tomcat9/conf/server.xml重启Tomcat节点2/usr/local/tomcat9/bin/shutdown.sh /usr/local/tomcat9/bin/startup.sh五、测试验证1. 静态页面访问浏览器输入http://192.168.81.133显示静态页面内容命令行curl -I http://192.168.81.133返回200状态码说明静态资源处理正常。2. 静态图片访问前提已经在/data/www/static/img目录下存放了图片 test.jpg然后给文件增加权限chmod 644 /data/www/static/img/test.jpg浏览器访问http://192.168.81.133/test.jpg深度验证为了证明这张图是Nginx 直接给你的而不是转发给 Tomcat 找的我们需要看HTTP 响应头Response Headers。在浏览器按F12打开开发者工具切换到Network网络标签。刷新页面点击test.jpg请求。查看右侧的HeadersServer: 应该显示nginx/1.xx.x。Cache-Control / Expires: 应该显示你配置的max-age864000(即 10 天)这证明expires 10d生效了。X-Real-IP / X-Forwarded-For: 如果你在响应头里能看到这些说明请求还在 Nginx 层。查看nginx的访问日志Access Log:由于nginx.conf文件中设置了静态缓存关闭了日志所以这一步需要修改配置文件打开日志。tail -f /usr/local/nginx/logs/access.log3. 反向代理与负载均衡验证多次刷新http://192.168.81.133内容按权重1:2显示。查看Tomcat访问日志/usr/local/tomcat/logs/localhost_access_log.*.txt可看到日志中记录的是用户真实IP而非Nginx服务器IP说明X-Real-IP配置生效。这里没有显示用户真实IP除了配置nginx还需要配置tomcat的日志格式vim /usr/local/tomcat9/conf/server.xml # 修改以下内容 Valve classNameorg.apache.catalina.valves.AccessLogValve directorylogs prefixlocalhost_access_log suffix.txt pattern%{X-Real-IP}i %l %u %t quot;%rquot; %s %b /重启tomcat重新查看日志