本地配置了 nginx 轉到一個 spring boot 應用:
測試內容
瀏覽器訪問 abc.com
nginx 代理轉發到 localhost:9999
觀察 spring boot 應用 中getServerPort 和 getLocalPort 及 header 內容
spring boot 應用 java 代碼
@RestController
@RequestMapping("/v1/ops")
public class DebugController {
@GetMapping("/test")
public void testPort(HttpServletRequest request){
System.out.println("" + request.getServerPort());
System.out.println("" + request.getLocalPort());
printHeader(request);
}
private void printHeader(HttpServletRequest request) {
Enumeration names = request.getHeaderNames();
System.out.println("============================================");
while(names.hasMoreElements()){
String name = (String) names.nextElement();
System.out.println(name + ":" + request.getHeader(name));
}
System.out.println("============================================");
}
}
本地 host 配置
ubuntu 環境下 修改 /etc/hosts
增加一條 127.0.0.1 abc.com
這樣瀏覽器訪問 abc.com 的時候,實際上訪問的是127.0.0.1
默認 80 端口,也就是訪問的本地的nginx 服務器。
nginx 配置
增加了下面這一段:
server {
listen 80;
server_name abc.com;
location /v1/ops/ {
proxy_pass http://localhost:9999;
}
}
sudo nginx -t // 檢查配置
sudo nginx -s reload // 應用配置
運行測試
結果如下
serverPort 和 localPort 都是 9999
修改 nginx 配置:
server {
listen 80;
server_name abc.com;
location /v1/ops/ {
proxy_pass http://localhost:9999;
proxy_set_header Host xxxx.com:7777;
}
}
serverPort 變爲 7777
localPort 保持爲 9999
結論:header 中的 host 會影響到 getServerPort 的返回值