當單臺應用已經無法應對日漸增長的訪問量時,我們往往會采用分布式部署,這里簡單介紹下單臺nginx結合多臺tomcat進行單應用部署的步驟: 1、使用upstream,在nginx的nginx.conf文件中的加入如下配置:
http {
#.....這里省略其他配置
upstream abc.test.com {
server 192.168.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.2:8081 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.0.2:8082 weight=1 max_fails=2 fail_timeout=30s;
}
#.....這里省略其他配置
}
2、增加一個server,對應被訪問的應用域名,如www.test.com
server{
listen 80;
server_name www.test.com;
charset utf-8;
location / {
proxy_pass http://abc.test.com;
}
}
3、在192.168.0.1和192.168.0.2兩臺服務器上各安裝2個tomcat,端口分別為8081,8082
4、重啟Nginx,配置生效 nginx -s reload
5、如上配置后,整個系統可以正常運行,但是我們的程序中往往會有獲取用戶真實ip的需求,但基于以上配置只能獲取到內網地址192.168.0.1和192.168.0.2
要獲取真實ip地址,需要將第二步的配置改為:
server{
listen 80;
server_name www.test.com;
charset utf-8;
location / {
proxy_pass http://abc.test.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
同時在java應用中這樣獲取:request.getHeader("x-forwarded-for");
6、這時,如果在系統中調用request.getServerName(),返回的也是內網ip,而不是www.test.com,需要增加如下配置
proxy_set_header Host $host;
注:當nginx和tomcat在一臺服務器上的話,這里是可以正確返回的。
技術文章收藏站點