當網站的PV達到億級時,服務器應該是屬於成堆堆的集羣。這時候如果後端出現問題後,無法快速定位出是哪一臺服務器,以前的常規操作就是通過日誌服務器來分析或採用監控的手段。前幾天的時候想到爲啥不將服務器的banner修改爲機房加對應IP的形式來進行快速定位呢?這樣既可以防止第三方的安全掃描軟件採取到服務器的版本號進行選擇性的***。又可以快速定位故障機。
建議:在實際生產環境中,建議不要將banner修改爲機房加IP,而改爲服務器資產統計表中的編號。
下面我們來談談Tomcat的banner如何修改。tomcat的版本分爲兩個:
1、/data/tomcat/lib/catalina.jar,即運行 /data/tomcat/bin/version.sh 命令看到的版本號。
2、/data/tomcat_rts/lib/tomcat-coyote.jar,即運行curl -I http:///localhost:80命令看到的版本號。
其中第一個jar包修改後的作用不大,只能在服務器上看到,所以不建議修改。如果要修改可以如下操作:
# jar xvf apache-tomcat-7.0.47/lib/catalina.jar #解壓catalina.jar 包。
# vi org/apache/catalina/util/ServerInfo.properties #修改版本號,即server.info=Apache Tomcat/7.0.33這行。
# jar cvf catalina.jar ./ #最後再打包,打包前記得將當前目錄下除了org和META-INF以外的目錄都刪除掉。
下面我們說說第二個jar包的修改方法,網上方法很多,
一說將jar包裏的class文件解出來,然後用ultraeditor修改的。我修改後服務器訪問不了,chrome的開發者工具顯示:
Request Headers CAUTION:Provisional headers are shown。
注:這裏也許是可行的,只不過不要在原來的banner後面添加新字符,而是直接將1.1修改爲123,保持長度一致應該可以。
一說將jar包裏的class文件解出來,然後用jd-gui.exe將該class文件反編譯成java,再修改banner,最後再用javac編譯成class文件覆蓋原jar包裏的class文件。我修改後,javac根本就編譯不成功,顯示如下錯誤:
Constants.java:4: error: package org.apache.tomcat.util.buf does not exist
最後說說我成功的方法:
將/data/tomcat_rts/lib/tomcat-coyote.jar包下載到本地,然後用winrar或者7zip打開,不用解壓。
將tomcat_rts/lib/tomcat-coyote.jar包裏的org\apache\coyote\ajp\Constants.class和org\apache\coyote\http11\Constants.class兩個文件拖出來,
使用winhex打開,選擇“選項”中的“編輯模式”,選擇默認的“Default Edit Mode (=editable)”,
直接在原來的Apache-Coyote/1.1上進行新字符的輸入,如:Tomcat-BJ-133-017。這裏注意長度一定,然後保存,
將修改後的class文件拖回壓縮包裏原來的文件覆蓋原來的文件。
將修改後的tomcat-coyote.jar包覆蓋掉原來的tomcat_rts/lib/tomcat-coyote.jar包,最後重啓tomcat即可看到新的版本信息。
[root@localhost tmp]# curl -I http://localhost:8080
HTTP/1.1 404 Not Found
Server: Tomcat-xq-193-123
Content-Length: 0
Date: Thu, 03 Apr 2014 08:46:41 GMT
Connection: close