人老了不習慣新事物,看到Application Server直接對外,雖然也沒什麼不可以,但就是覺得怪怪的。玩Nginx時順便試了一下,是可以做到的反向代理及負載平衡的
環境
Nginx : 10.0.0.1 listen on 80
Jboss AS (7) 01 : 10.0.0.2 listen on 8080 with Application /App1
JBoss AS (8) 02 : 10.0.0.2 listen on 8081 with Application /App2
JBoss AS (7) 03 : 10.0.0.3 listen on 8080 with Application /App1
nginx 中的設定很簡單
單獨存取 JBoss 02 上的App2 的話,Nginx 中 http 的設定可以這樣寫
http { # <略> server { listen 80; #<略> location /App2 { proxy_pass http://10.0.0.2:8081 ; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }
這樣就可以透過 http://10.0.0.1/App2存取了,但有個小問題是 JBoss 的Access log 吃到的來源 IP 通通會變成 10.0.0.1
必須將 JBoss 的 log pattern做點小修改
<access-log pattern="%{X-Real-IP}i %a %l %u %D %t %r %s %b %{Referer}i %{User-Agent}i"/>
如果是有兩台 Application Server 做負載平衡去存取 /App1 ,也差不多簡單,多一個 upstream的區塊去定義伺服器群就好
http { # <略> upstream Jboss { server 10.0.0.2:8080; server 10.0.0.3:8080; } server { listen 80; #<略> location /App1 { proxy_pass http://Jboss ; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }
如果架構沒那麼雜,沒有說什麼網頁要去那一區Application Server,另外的什麼網頁要去另一區,那location 後頭指向 "/" 就好。
另外這個 proxy 的功能還能指定權重、備用server等,還算可以用。
比較悲催的是 health check 的部份,預設就有max_fail、fail_timeout、slow_start這些參數,但組不出太聰明的機制,如果要聰明版的health_check nginx 有這個功能,罷特,要在 nginx plus 這個收錢的版本才有,如果用免錢的..
在維修或是重啟 application server 的時候,還是去改一下 nginx.conf (拿掉維修的 server 或是在該 server 後頭加一個 down 的關鍵字) 吧
0 意見:
張貼留言