本地配置了 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 的返回值