鍍金池/ 問(wèn)答/Java  Linux/ Nginx 使用 proxy_pass 后在 Java 中 getRequest

Nginx 使用 proxy_pass 后在 Java 中 getRequestUrl() 的問(wèn)題

在做一個(gè) CAS 系統(tǒng),業(yè)務(wù)系統(tǒng)發(fā)現(xiàn)用戶沒(méi)有登錄后引導(dǎo)跳轉(zhuǎn)到 CAS。

業(yè)務(wù)系統(tǒng)1域名:benchmark-1.xxx.com
業(yè)務(wù)系統(tǒng)2域名:benchmark-2.xxx.com
CAS域名:cas.xxx.com

nginx 配置如下:

server {
    listen 80;
    server_name cas.xxx.com;

    location / {
        proxy_pass http://localhost:8090;
    }
}

server {
    listen 80;
    server_name benchmark-1.xxx.com;

    location / {
        proxy_pass http://localhost:8095;
    }
}

server {
    listen 80;
    server_name benchmark-2.xxx.com;

    location / {
        proxy_pass http://localhost:8096;
    }
}

現(xiàn)在我訪問(wèn)業(yè)務(wù)系統(tǒng)1,http://benchmark-1.xxx.com/us...,發(fā)現(xiàn)沒(méi)有登錄,攔截器 redirect 請(qǐng)求到 http://cas.xxx.com/auth/login。在攔截器里面我獲取了當(dāng)前請(qǐng)求的 URL:

String requestUrl = request.getRequestURL().toString();

當(dāng)頁(yè)面跳轉(zhuǎn)后觀察到瀏覽器地址欄的主機(jī)變成了 localhost:8095

http://cas.xxx.com/auth/login?redirectUrl=http://localhost:8095/user/get

這樣我的 CAS 就沒(méi)有辦法重定向回業(yè)務(wù)系統(tǒng)。我現(xiàn)在定位是 Nginx 配置 proxy_pass 的問(wèn)題,但是不知道怎么改,請(qǐng)各位不吝賜教。

回答
編輯回答
玩控

自問(wèn)自答!?。?/p>

只需要在 proxy_pass 之前把原始的主機(jī)名相關(guān)的東西往代理里面設(shè)置一下就可以了。

location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://localhost:8095;
}
2018年3月27日 05:17
編輯回答
詆毀你

這個(gè)不是nginx的問(wèn)題,而是后臺(tái)系統(tǒng)的配置問(wèn)題。因?yàn)槟憬?jīng)過(guò)了反向代理,在后臺(tái)系統(tǒng)看來(lái)你訪問(wèn)的就是http://localhost:8095/user/get,因此就給你redirect過(guò)去了。

這種情況必須在后臺(tái)有相應(yīng)的配置,能配置用戶訪問(wèn)的真正的URL。比如Jenkins,GitLab等等軟件,經(jīng)過(guò)反向代理訪問(wèn)必須在后臺(tái)(GitLab是配置文件)配置一個(gè)用戶訪問(wèn)的URL。

2017年1月2日 05:37