nginx+tomcat實現單IP,多域名,多站點的訪問配置教程
阿新 • • 發佈:2019-01-25
其實這個問題分為兩個子問題來解決:
1.如何實現單IP多tomcat站點
2.對於多域名的多個站點如何通過nginx分發訪問
問題一:解決方案又分為兩種:
a.單例項tomcat配置多個host站點
這種方法有一個缺點就是無法分站點除錯,如果一個站點出了問題,關服務進行除錯會停掉所有站點(不過這個方案就不會涉及到第二個問題,因為這樣單例項無法實現多個站點對應多個頂級域名)
b.多例項tomcat配置實現單機多站點 這個方法很簡單,就相當於把tomcat拷貝多份,然後修改各個tomcat的server.xml中的shutdown,http以及AJP1.3的埠,然後將tomcat例項啟動即可。不過這個對記憶體要求比較高,因為每個tomcat跑起來之後可能會佔200M左右記憶體,這還是對併發量比較小的,如果例項數一多起來,比如我們現在有個專案需要20多個站點放在一臺伺服器上(主要是貪腐無處不在,錢有但是不給你買硬體。。無力吐槽。。。。),這樣4G多的記憶體就吃掉了。 另外一點就是通過多例項配置多站點會有另外一個問題,可能每一個站點都有一個單獨的頂級域名,而域名的解析止於IP,因此埠的對映需要自己另做,這就涉及到了第二個問題如何解決了。 具體如何配置多例項實現單機多站點,可以參照下面幾個連結: 上面我說到可能會有記憶體溢位的問題,直接修改tomcat的記憶體引數,如果是linux直接修改catalina.sh即可,如果是windows的話需要修改登錄檔中Java的引數:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java
總體來講問題一比較好解決,原理上很簡單,單個例項無法除錯就用多個例項,多個例項需要多個埠,當記憶體不足時修改它的啟動引數,然後重啟就行了。
問題二:這裡我只說用nginx怎麼解決,網上有人apache貌似也能解決,我沒有弄成功
nginx是俄羅斯人寫的一個開源的web伺服器,國內的使用先驅是淘寶,而且貌似他們的工程師在寫一本叫《nginx從入門到精通》的書。nginx是一個非常優秀的web伺服器,可以說前途一片光明。
一般nginx現在多使用者做負載均衡,配合tomcat或者apache做分發,網上這個講的也很多,但是我要解決的問題不太相同,怎麼樣通過域名解析到不同埠,這得先說以下nginx的配置檔案。
上圖是一個簡單的示意圖,描述了整個訪問的過程:
DNS伺服器將域名解析到IP地址,nginx作為反向代理收到請求之後根據配置檔案將請求傳送到對應的tomcat例項。
我測試時nginx反向代理放在我本機上,tomcat例項在同一臺遠端伺服器,在hosts檔案中虛擬兩個域名假設為兩例項中的站點的域名。
我已經測試過,這個方案是可行的,
b.多例項tomcat配置實現單機多站點 這個方法很簡單,就相當於把tomcat拷貝多份,然後修改各個tomcat的server.xml中的shutdown,http以及AJP1.3的埠,然後將tomcat例項啟動即可。不過這個對記憶體要求比較高,因為每個tomcat跑起來之後可能會佔200M左右記憶體,這還是對併發量比較小的,如果例項數一多起來,比如我們現在有個專案需要20多個站點放在一臺伺服器上(主要是貪腐無處不在,錢有但是不給你買硬體。。無力吐槽。。。。),這樣4G多的記憶體就吃掉了。 另外一點就是通過多例項配置多站點會有另外一個問題,可能每一個站點都有一個單獨的頂級域名,而域名的解析止於IP,因此埠的對映需要自己另做,這就涉及到了第二個問題如何解決了。 具體如何配置多例項實現單機多站點,可以參照下面幾個連結: 上面我說到可能會有記憶體溢位的問題,直接修改tomcat的記憶體引數,如果是linux直接修改catalina.sh即可,如果是windows的話需要修改登錄檔中Java的引數:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java
nginx配置檔案位於conf/nginx.conf,它最主要的部分是http部分,這裡最重要的兩個配置項是upstream,server,這兩個項都可以有多個配置。
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www.aaa.com { server 124.205.16.69:8090; } upstream www.bbb.com { server 124.205.16.69:8100; } server { listen 80; server_name www.aaa.com; location / { index index.html index.jsp; proxy_pass http://www.aaa.com; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } } server { listen 80; server_name www.bbb.com; location / { index index.html index.jsp; proxy_pass http://www.bbb.com; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } } }