有一個站點端口是9005 有配置Nginx做負載均衡,配置說明如下
對外開放端口:192.168.1.100:9005 對外開放 配置域名www.abc.com
tomcat部署站點1:192.168.1.100:9015
tomcat部署站點2:192.168.1.100:9025
有java代碼:request.getServerName() 因為有有些人用域名訪問有些人用IP訪問
因為在Nginx里只配置了域名www.abc.com訪問轉發,如下
http { include mime.types; default_type application/octet-stream; client_max_body_size 50m; sendfile on; upstream www.abc.com{ #ip_hash; server 192.168.1.100:9015; server 192.168.1.100:9025; } server { listen 9005; server_name www.abc.com; location / { proxy_pass http://www.abc.com; proxy_hide_header Set-Cookie; } } }
如果用域名 www.abc.com:9005 訪問 request.getServerName() 得到www.abc.com
如果用域名 192.168.1.100:9005 訪問 request.getServerName() 得到也是www.abc.com (這不是我想要的,應該得到192.168.1.100)
查了半天以為代碼寫錯了,最后想起來是Nginx轉發時用域名在當做地址在訪問,所以代碼只能得到域名。網上查了一下只要添加一個IP訪問的配置即可
解決辦法在修改nginx.conf配置文件即可 代碼如下:
http { include mime.types; default_type application/octet-stream; client_max_body_size 50m; sendfile on;
#domain visit upstream www.abc.com{ #ip_hash; server 192.168.1.100:9015; server 192.168.1.100:9025; } server { listen 9005; server_name www.abc.com; location / { proxy_pass http://www.abc.com; proxy_hide_header Set-Cookie; } } #ip visit upstream 192.168.1.100{ #ip_hash; server 192.168.1.100:9015; server 192.168.1.100:9025; } server { listen 9005; server_name 192.168.1.100; location / { proxy_pass http://192.168.1.100; proxy_hide_header Set-Cookie; } } }
,重新Nginx,再訪問進行測試,就搞定了。