getServerPort 和 getLocalPort 的測試

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章