1、部署背景html
某服務器A:10.68.4.198 域名:edi.qnb.com ( tomcat應用,web 訪問但須賬密認證,其餘服務器鏈接查詢卻無須認證 ) 因業務須要,須要對A服務器作負載均衡。要求用nginx的upstream模塊。A服務器上安裝了tomcat和nginx,nginx作轉發,將端口80接收到的請求,轉發至本機的8080端口上,由tomcat處理。 現有相同配置的服務器B:10.68.4.248,用於作A的負載均衡。前端
按照通常設置是直接在upstream塊中添加以下兩句,可是這樣。web訪問的就會出問題,session丟失。會一直是登錄界面。然而nginx完美解決了這個問題。那就是用ip_hash。nginx
ip_hash:可以將某個客戶端的ip的請求經過哈希算法定位到同一臺後端服務器。
web
upstream edi.qnb.com { ip_hash; server 127.0.0.1:8080; server 10.68.4.248:8080; }
經過ip_hash確實可以解決session丟失的問題。可是相同ip卻永遠只會調轉到一臺服務器上,web訪問能夠負載均衡,那麼服務器訪問呢?而服務器A大可能是其餘服務器鏈接訪問。 因此ip_hash只能解決web訪問,而不能解決服務器間的訪問。 算法
個人思路:和同事討論後,決定在nginx上配置兩個域名。一個用於web訪問,不作負載處理(訪問次數相對少)。另外一個用做服務器間的訪問,作負載處理。這樣既解決了web訪問session問題。又能合理的將服務器鏈接請求進行負載處理。接下來我將個人配置文件貼出,供你們參考。 shell
2、配置修改apache
首先修改nginx的配置文件nginx.conf
windows
#一、qnb.edi.com這個域名用於用戶web訪問。 upstream qnb.edi.com { server 127.0.0.1:8080; } server { listen 80; server_name qnb.edi.com; proxy_redirect off; location / { proxy_store off; access_log /data/log/nginx/access.log main; proxy_pass http://qnb.edi.com; } } #二、edi.qnb.com這個域名用於服務器間的訪問。服務器間不須要認證。 upstream edi.qnb { server 127.0.0.1:8080; server 10.68.4.248:8080; } server { listen 80; server_name edi.qnb.com; proxy_redirect off; location / { proxy_store off; access_log /data/log/nginx/access.log main; proxy_pass http://edi.qnb; } }
其次,修改4.198和4.248上的tomcat的配置文件server.xml
後端
#一、4.198上的tomcat的配置文件 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/www/html" reloadable="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" buffered="false" prefix="access_log." suffix=".txt" directory="/data/log/tomcat" pattern="%h %l %u %t %r %s %b - %T"/> </Context> </Host> #二、4.248上的tomcat的配置文件 <Host name="edi.qnb.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/www/html" reloadable="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" buffered="false" prefix="access_log." suffix=".txt" directory="/data/log/tomcat" pattern="%h %l %u %t %r %s %b - %T"/> </Context> </Host>
3、測試瀏覽器
首先申明,edi.qnb.com和qnb.edi.com。這兩個域名是我隨便取得,實際並不存在。所以在用域名訪問時,請在本機的hosts文件上添加以下信息。windows上hosts文件路徑:C:\Windows\System32\drivers\etc
10.68.4.198 qnb.edi.com 10.68.4.198 edi.qnb.com
測試下訪問edi.qnb.com,看能否負載。
這是個人解決辦法。可能跟網上不少大神的有出入。小弟還在學習中~~~~,不喜勿噴!
4、個人疑問?
配置nginx.conf和server.xml時,有一塊我沒有弄明白。網上搜索了不少資料,可是沒找到能詳細的說明這二者之間關係的文章。這裏貼出,還望知道的大神爲我解惑。
nginx.conf中的虛擬主機。
server_name edi.qnb.com;
server.xml中的虛擬主機
<Host name="edi.qnb.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
爲啥這兩個虛擬主機的名字必需要同樣啊?有大神能給我個解釋麼。。。
非官方解釋:我當時是這樣理解的,一臺完整web服務器,有前端瀏覽器訪問--nginx,後端處理請求數據--tomcat。這兩個在一塊兒後,就組成了一個完整的web服務器。因此主機名得要同樣!!!
2015.8.28 11:46 原諒我放蕩不羈沒文化,剛剛看到有文章講「tomcat實現多域名配置」。 上述問題能夠忽略。