![](/img/trans.png)
[英]How to hide the 'server' parameter in the apache2 http response header?
[英]How to you get server information in HTTP response header for Apache Tomcat
我們在負載均衡器后面有 n 台服務器。 當一個 http 請求進來時,它通過輪詢方法被路由到其中一台服務器。 我的問題是,有什么辦法可以在 http 響應中發送服務器信息(請求定向到的服務器)?
如果您具有所需的信息(IP地址?服務器的友好名稱?),則可以使用response.setHeader(“ Backend-Machine”,“ ServerName”)輕松設置標頭。
真正的問題是如何獲取該信息。 大多數服務器具有多個NIC,這意味着您不能隨便挑選一個NIC並返回IP地址(您可能會得到127.0.0.1,這對任何人都沒有幫助)。 如果這對您很重要,建議您在JVM啟動時設置一個系統屬性,其中應包括您認為可以識別服務器的任何字符串。 然后,編寫一個過濾器,僅將字符串添加到每個響應中。
對子問題“您從哪里獲得信息”的簡短回答。 TLDR; 說: /opt/tomcat-<your_version>/lib$
執行:
java -cp catalina.jar org.apache.catalina.util.ServerInfo
你會得到這樣的東西,這可能就是你正在尋找的東西。 我會將其縮減為僅您需要的格式,因為格式本質上只是 K/V,每行一個,以冒號作為分隔符。
Server version: Apache Tomcat/8.5.59
Server built: Oct 6 2020 16:57:18 UTC
Server number: 8.5.59.0
OS Name: Linux
OS Version: 5.4.0-72-generic
Architecture: amd64
JVM Version: 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10
JVM Vendor: Private Build
我無法相信這是如此困難。 應該只有一些 Tomcat 屬性允許它將 ServerInfo 附加到響應,最有可能在“服務器”響應 header 中。
無論如何,既然我一直在挖掘這個,我不得不說
克里斯托弗·舒爾茨
以下關於需要添加到應用程序的過濾器是正確的。 至少那會解決給定應用程序的問題。 但是在同一台服務器上運行的應用程序 rest(已部署的 WAR)如何呢? 為每個添加一個過濾器? 聽起來多余。 不過,這是一個示例代碼片段(您可以在此處查看原始帖子),非常感謝 Maciej Walkowiak:
@Bean
public Filter myFilter() {
return new Filter() {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final HttpServletResponse res = (HttpServletResponse) servletResponse;
res.addHeader("Server", "my very custom server");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
};
}
對於勇敢的人來說,這就是它的來源。 您可以在 IntelliJ org.apache.catalina.util.ServerInfo
中打開這個 class ,它將顯示:
只需抓住您感興趣的調用並將它們返回的內容填充到您在 Spring MVC 過濾器中創建的服務器 header 中。 然后是 ServerInfo.properties,您只能看到其中三個:
就個人而言,我在我的 Spring 引導項目的 application.properties 中像這樣設置服務器 header:
server.server-header="Servlet engine: [Apache Tomcat/9.0.58]"
這解決了服務器級別的問題,我不需要觸及其中包含的代碼 - 在 FireFox 開發人員工具,.network 選項卡中測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.