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

    技术2023-07-20  64

    Nginx反向代理Tomcat


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

    一台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可以看到反向代理成功 ,是不是很简单 ,哈哈

    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是不存在图片的

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

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

    #动态走 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; }

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

    Processed: 0.016, SQL: 9