Tomcat Nginx動靜分離與負載均衡Tomcat

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;
          }

 至此動靜分離+負載均衡搭建完畢是不是很簡單呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章