Nginx反向代理Tomcat


环境准备,tomcat是已经部署好jforum网站了  

Tomcat Nginx动静分离与负载均衡Tomcat_nginx

一台nginx+一台tomcat 

[root@localhost vhosts]# ps -ef | grep tomcat
root 10865 1 1 15:37 pts/1 00:00:37 /usr/java/jdk1.8.0_131/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start



[root@localhost vhosts]# ps -ef | grep nginx
root 17755 1 0 16:24 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 17781 17755 0 16:31 ? 00:00:00 nginx: worker process

 nginx反向代理到tomcat

server {
listen 80;
server_name v1.test.net;
location / {
proxy_set_header host $host;
proxy_pass http://192.168.179.102:8080;
}
}

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

直接在浏览器输入192.168.179.102:80可以看到反向代理成功 ,是不是很简单 ,哈哈

Tomcat Nginx动静分离与负载均衡Tomcat_tomcat_02

Nginx和Tomcat负载均衡+动静分离


因为后端只有一台tomcat。如果有多台nginx会负载均衡到多台tomcat。如果需要部署多台tomcat只需要拷贝其目录就行

[root@localhost ~]# cp /usr/local/tomcat/ /usr/local/tomcat_v1 -a
[root@localhost ~]# cd /usr/local/tomcat_v1/
[root@localhost tomcat_v1]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat_v1
Using CATALINA_HOME: /usr/local/tomcat_v1
Using CATALINA_TMPDIR: /usr/local/tomcat_v1/temp
Using JRE_HOME: /usr/java/jdk1.8.0_131
Using CLASSPATH: /usr/local/tomcat_v1/bin/bootstrap.jar:/usr/local/tomcat_v1/bin/tomcat-juli.jar

Tomcat started.

这个日志是tomcat主日志

[root@localhost tomcat_v1]# ll /usr/local/tomcat_v1/logs/catalina.out
-rw-r--r--. 1 root root 27800 May 30 13:15 /usr/local/tomcat_v1/logs/catalina.out



#可以看到tomcat_v1和之前tomcat端口冲突了,启动失败了

[root@localhost tomcat_v1]# tail -10f /usr/local/tomcat_v1/logs/catalina.out
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
30-May-2020 13:15:30.798 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:30.798 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
30-May-2020 13:15:30.799 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina
30-May-2020 13:15:31.016 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:31.016 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
30-May-2020 13:15:31.017 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
30-May-2020 13:15:31.017 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

这个文件是tomcat的配置文件

#修改端口号避免冲突
[root@localhost tomcat_v1]# ll /usr/local/tomcat_v1/conf/server.xml
-rw-------. 1 root root 6458 Nov 9 2016 /usr/local/tomcat_v1/conf/server.xml

#修改三个端口配置
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

#修改完后重启即可,保证和之前在一台服务器上的tomcat端口不同即可
[root@localhost tomcat_v1]# /usr/local/tomcat_v1/bin/startup.sh


#由于tomcat_v1拷贝的是tomcat的目录,所以tmocat发布目录和tomcat_v1的发布目录内容一样访问
http://192.168.179.102:8081/forums/list.page
http://192.168.179.102:8080/forums/list.page
都可以得到相同的页面

配置Nginx,将上面新添加的一台添加在负载均衡组里面,同时配置动静分离

#动静分离
[root@localhost tomcat_v1]# cat /usr/local/nginx/conf/nginx.conf

http {
upstream tomcat_web{
server 127.0.0.1:8080 max_fails=2 fail_timeout=15;
server 127.0.0.1:8081 max_fails=2 fail_timeout=15;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name v1.test.net;

#这里不需要配置root没有意义,因为直接proxy_pass

location / {
proxy_pass http://tomcat_web;
proxy_set_header host $host;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
proxy_set_header X-Real_IP $remote_addr;
}

#实现tomcat和nginx动静分离

location ~ .*\.(js|css)$ {
root /usr/local/nginx/html/v1.test.net;
expires 7d;
access_log off;
}

location ~ .*\.(eot|ttf|otf|woff|svg)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

 

再去访问可以看到已经动静分离了,但是在nginx虚拟主机的发布目录下面html/v1.test.net是不存在图片的

Tomcat Nginx动静分离与负载均衡Tomcat_nginx_03

[root@localhost ~]# cp -r /usr/local/tomcat/webapps/ROOT/* /usr/local/nginx/html/v1.test.net/

将tomcat目录下面所有文件全部拷贝到nginx发布目录下面,这样静态文件就在发布目录下面了,再次刷新就可以看到图片等静态资源全部访问到了。所以静态资源全部找到了,动态资源就放在上游的tomcat

Tomcat Nginx动静分离与负载均衡Tomcat_tomcat_04

#动态走

location / {
proxy_pass http://tomcat_web;
proxy_set_header host $host;
}


#静态走

location ~ .*\.(js|css)$ {
root /usr/local/nginx/html/v1.test.net;
expires 7d;
access_log off;
}

location ~ .*\.(eot|ttf|otf|woff|svg)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
root /usr/local/nginx/html/v1.test.net;
expires 30d;
access_log off;
}

 至此动静分离+负载均衡搭建完毕是不是很简单呢?