Nginx、Tomcat反向代理和負載均衡實例

反向代理

瀏覽器不直接訪問下圖192.168.20.20:8080,在瀏覽器地址欄輸入www.test.com,跳轉到tomcat主頁(192.168.20.20:8080)

@nginx.conf文件組成
1)全局塊
  主要設置一些影響nginx服務器整體運行的配置,比如work_process 1; 值越大則支持的併發處理量越大
2)events塊
  主要設置nginx服務器與用戶的網絡連接的配置,比如worker_connections 1024; 支持的最大連接數
3)http塊(配置最頻繁的部分)
  包括http全局塊和server塊

@tomcat安裝(默認端口8080)
1)下載安裝包
2)tar.gz解壓 => bin/目錄執行./startup.sh啓動tomcat
3)對外開放8080訪問端口
firewall-cmd --add-port=8080/tcp--permanent
firewall-cmd --reload
查看已開放端口
firewall-cmd --list-all
4)爲了測試稍微修改主頁的內容,例如
# cd /usr/local/src/apache-tomcat-8.5.54/webapps/ROOT
# vi index.jsp
修改index.jsp的內容, Home => Home-test
<body>
    <div id="wrapper">
        <div id="navigation" class="curved container">
            <span id="nav-home"><a href="${tomcatUrl}">Home-test</a></span>
……

5)通過瀏覽器直接訪問192.168.20.20:8080可以看到tomcat主頁
說明:tomcat默認端口8080,可在conf/server.xml中修改
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

@配置步驟
瀏覽器在設備1,nginx在設備2,tomcat在設備3

【例1】實現上圖例
1)設備1 hosts文件中進行域名和ip對應關係的配置,echo "192.168.4.2  www.test.com" > /etc/hosts
2)設備2 nginx進行請求轉發的配置(反向代理)

編輯nginx.conf,訪問192.168.4.28:80(第2、3行)轉發到192.168.20.20:8080(第7行)

server{
    listen    80;
    server_name  192.168.4.28;

    location / {
        root    html;
        proxy_pass http://192.168.20.20:8080;
        index index.html index.htm;
    }
}

3)設備1 瀏覽器訪問www.test.com

【例2】根據訪問的路徑跳轉
訪問http://www.test.com/flight/index.html 跳轉到http://192.168.20.20:8080/flight/index.html
訪問http://www.test.com/hotel/index.html 跳轉到http://192.168.20.20:8080/hotel/index.html

1)設備3 在apache-tomcat-tomcat-8.5.54/webapps下創建文件夾和測試頁面

[root@xxx webapps]# mkdir flight
[root@xxx webapps]# mkdir hotel
[root@xxx webapps]# cd flight/
[root@xxx flight]# echo "<h1>flight</h1>" > index.html
[root@xxx flight]# cd ../hotel/
[root@xxx hotel]# echo "<h1>hotel</h1>" > index.html

2)設備2 編輯nginx.conf,反向代理配置

server{
    listen  80;
    server_name  192.168.4.28;

    location ~ /flight/ {
        proxy_pass http://192.168.20.20:8080
    }

    location ~ /hotel/ {
        proxy_pass http://192.168.20.20:8080
    }
}

說明:
~ 表示URI包含正則表達式,區分大小寫
~* 表示URI包含正則表達式,不區分大小寫

3)設備1 分別打開兩個頁面

訪問http://www.test.com/flight/index.html

訪問http://www.test.com/hotel/index.html

 

負載均衡

配置三臺tomcat,測試負載均衡其中tomcat1部署在一臺虛擬機,tomcat2和tomcat3部署在另一臺虛擬機,如下

tomcat1 192.168.20.19:8080
tomcat2 192.168.20.20:8080
tomcat3 192.168.20.20:8090
說明:
1.爲了測試方便,對應地修改主頁內容
2.因爲tomcat2和tomcat3部署在同一臺虛擬機,修改tomcat3的server.xml中涉及的端口,然後分別啓動
<Server port="8005" shutdown="SHUTDOWN"> 中8005 => 8015
<Connector port="8080" protocol="HTTP/1.1"...> 中8080 => 8090

[root@xxx ROOT]# cd ../../bin/
[root@xxx bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/src/apache-tomcat-3
Using CATALINA_HOME:   /usr/local/src/apache-tomcat-3
Using CATALINA_TMPDIR: /usr/local/src/apache-tomcat-3/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/src/apache-tomcat-3/bin/bootstrap.jar:/usr/local/src/apache-tomcat-3/bin/tomcat-juli.jar
Tomcat started.
[root@xxx bin]# cd ..
[root@xxx apache-tomcat-3]# cd ..
[root@xxx src]# cd apache-tomcat-2/bin
[root@xxx bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/src/apache-tomcat-2
Using CATALINA_HOME:   /usr/local/src/apache-tomcat-2
Using CATALINA_TMPDIR: /usr/local/src/apache-tomcat-2/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/src/apache-tomcat-2/bin/bootstrap.jar:/usr/local/src/apache-tomcat-2/bin/tomcat-juli.jar
Tomcat started.
[root@xxx bin]#
[root@xxx bin]# netstat -ntl | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN
[root@xxx bin]# netstat -ntl | grep 8090
tcp        0      0 :::8090                     :::*                        LISTEN
[root@xxx bin]#

編輯 /usr/local/nginx/conf/nginx.conf

    upstream tomcatlist{
        server 192.168.20.19:8080 weight=1;
        server 192.168.20.20:8080 weight=1;
        server 192.168.20.20:8090 weight=2;
    }

    server {
        listen       80;
        server_name  www.test.com;

        location / {
            proxy_pass http://tomcatlist;  # http:// + upstream後的名稱
        }
……

爲了測試方便,對應地修改

瀏覽器打開www.test.com,會根據配置去連後臺的tomcat,有三種可能

連接到tomcat1

連接到tomcat2

連接到tomcat3

 

 tomcat1,2,3的權重比是1:1:2,預期每4次打開www.test.com,會有兩次連到tomcat3,分別一次連到tomcat1,2

測試結果:瀏覽器8次打開www.test.com,如下,符合配置規則

第1次 tomcat3
第2次 tomcat1
第3次 tomcat3
第4次 tomcat2
第5次 tomcat3
第6次 tomcat1
第7次 tomcat3
第8次 tomcat2

@關於upstream
除了weight控制負載均衡,還可以使用如下方式
ip_hash 同一個IP訪問固定的tomcat,同一個訪客登錄固定訪問一個後端tomcat,例如登錄之後進行其它操作不會因爲換了服務器而沒有登錄

fair(第三方)按後端服務器的響應時間來分配請求,響應時間短的優先分配。

url_hash(第三方)按訪問url的hash結果來分配請求

 

參考資料:
Nginx教程  https://www.bilibili.com/video/BV1zJ411w7SV
Nginx配置upstream實現負載均衡 https://www.cnblogs.com/wzjhoutai/p/6932007.html
tomcat,nginx,apache的聯繫  https://www.zhihu.com/question/32212996

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