在实际生产中,Tomcat服务器一般不单独使用在项目中,对于静态资源的响应Nginx表现的比较好,另外由于nginx是专门用于反向代理的服务器,所以很容易实现将java的请求转发到后端交给tomcat容器处理,而本身用来处理静态资源。
通常tomcat前端是nginx或apache,后端都为tomcat,也就意味着无论前端是什么角色都是以代理的方式进行工作的;但是要注意的是如果基于nginx做反向代理,转发请求到tomcat的时候是基于http协议进行转发的;但注意的是tomcat的连接器有httpajp jk2 jserv;而如果基于nginx做转发的话只支持http做转发;如果apache做代理转发的话,几乎常用协议都支持;但常用的连接类型都是ajp协议,因为ajp协议可以工作在二进制模式下,而http协议都是工作在文本模式下,所以ajp的效率要比http要高效;因此要部署一个tomcat前端web服务器很多时候可以使用apache.
下面通过以下架构部署nginx+tomcat实现方向代理:
反向代理系统架构规划如下:
服务器角色 | 服务器IP |
Nginx | eth0:172.16.100.1/16 eth1:192.168.56.10/24 |
Tomcat1 | eth0:192.168.56.11/24 |
Tomcat2 | eth0:192.168.56.12/24 |
statichost(nginx) | eth0:192.168.56.13/24 |
配置过程如下:
Tomcat服务安装配置:
(1)安装JDK
# rpm -ivh jdk-7u9-linux-x64.rpm --安装JDK后生成的文件 # cd /usr/java/ ; ll total 4 lrwxrwxrwx 1 root root 16 Sep 27 09:09 default -> /usr/java/latest drwxr-xr-x 10 root root 4096 Sep 27 09:09 jdk1.7.0_09 lrwxrwxrwx 1 root root 21 Sep 27 09:09 latest -> /usr/java/jdk1.7.0_09 --配置JDK环境变量 # vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.7.0_09 export PATH=$PATH:$JAVA_HOME/bin --执行使环境变量生效 # . /etc/profile.d/java.sh --测试如下: # java -version java version "1.7.0_45" --jdk版本 OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
(2)安装tomcat
--解压tomcat包至/usr/local下 # tar xf apache-tomcat-7.0.67.tar.gz -C /usr/local/ # cd /usr/local/ # ln -sv apache-tomcat-7.0.67 tomcat --配置tomcat环境变量 # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$CATALINA_HOME/bin # . /etc/profile.d/tomcat.sh --测试如下: # catalina.sh version Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0_09 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.67 Server built: Dec 7 2015 13:07:11 UTC Server number: 7.0.67.0 OS Name: Linux OS Version: 2.6.32-431.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_09-b05 JVM Vendor: Oracle Corporation --为tomcat提供srv启动脚本 # vim /etc/init.d/tomcat #!/bin/sh # Tomcat init script for Linux. # # chkconfig: 2345 96 14 # description: The Apache Tomcat servlet/JSP container. # JAVA_OPTS='-Xms64m -Xmx128m' JAVA_HOME=/usr/java/latest CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME case $1 in start) $CATALINA_HOME/bin/catalina.sh start;; stop) $CATALINA_HOME/bin/catalina.sh stop;; restart) $CATALINA_HOME/bin/catalina.sh stop sleep 2 $CATALINA_HOME/bin/catalina.sh start;; *) echo "Usage: `basename $0` {start|stop|restart}" exit 1 ;; esac # chmod +x /etc/init.d/tomcat # chkconfig --add tomcat # service tomcat start --检查tomacat默认监听端口如下所示: # ss -tunlp | grep java tcp LISTEN 0 100 :::8080 :::* users:(("java",19525,42)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",19525,47)) tcp LISTEN 0 100 :::8009 :::* users:(("java",19525,43))
配置nginx服务器过程如下:
--配置nginx.conf http { upstream tomcat { --定义负载均衡集群 server 192.168.56.11:8080; server 192.168.56.12:8080; } server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.jsp index.html index.htm; } location ~* \.(jsp|do)$ { --定义所有动态内容转发至后端tomcat集群中 proxy_pass http://tomcat; } location ~* \.(ico|css|jpg|jpeg|gif|png|pdf|doc|rar|exe|zip)$ { --定义所有静态内容转发至192.168.56.13 proxy_pass http://192.168.56.13; } } }
访问测试如下:
上面我们可以看到jsp动态内容,静态内容都已经转发至192.168.56.13静态内容主机上了。接下来我们配置好statichost主机,如下配置:
--安装配置好nginx --拷贝tomcat图片至statichost主机上 # scp root@192.168.56.11:/usr/local/tomcat/webapps/ROOT/* /usr/share/nginx/html
测试访问如下:
以上为Nginx+Tomcat实现负债均衡反向代理及动静分离内容
转载于:https://blog.51cto.com/gzsamlee/1858793