亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 2 個反向代理鏈后面強制主機名

如何在 2 個反向代理鏈后面強制主機名

小唯快跑啊 2023-03-02 15:05:23
一個 spring boot 應用程序托管在 2 個反向代理(鏈接)后面。反向代理 1 --> 反向代理 2 --> spring boot 應用程序并且主機和轉發標頭未正確鏈接。有沒有辦法強制主機為固定值?像“反向代理 1”的主機名?
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

我已通過更改傳入請求中的服務器名稱解決了我的問題。


我已經為 tomcat 添加了一個閥門:


public class HostForceValve extends ValveBase {


private final String proxyName;


public HostForceValve(String proxyName) {

    this.proxyName = proxyName;

}


@Override public void invoke(Request request, Response response) throws IOException, ServletException {

    org.apache.coyote.Request coyoteRequest = request.getCoyoteRequest();

    MimeHeaders mimeHeaders = coyoteRequest.getMimeHeaders();

    mimeHeaders.removeHeader("host");

    final MessageBytes host = mimeHeaders.addValue("host");

    host.setString(proxyName);

    request.setRemoteHost(proxyName);

    request.getCoyoteRequest().serverName().setString(proxyName);

    try {

        Valve next = getNext();

        if (null == next) {

            return;

        }

        next.invoke(request, response);

    } finally {

        request.setRemoteHost(proxyName);

    }


}

}

并將此值添加到 tomcat 嵌入式服務器:


@Component

public class MyTomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {


@Value("${proxyName:}")

private String proxyName;


@Override

public void customize(TomcatServletWebServerFactory factory) {

    final Collection<Valve> currents = factory.getEngineValves();

    final ArrayList<Valve> addValves = new ArrayList<>(currents);

    if (StringUtils.hasLength(proxyName)) {

        addValves.add(0, new HostForceValve(proxyName));

    }

    factory.setEngineValves(addValves);

}

}


查看完整回答
反對 回復 2023-03-02
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號