最近公司又在搞安全監控,針對tomcat關於AJP端口存在的漏洞要求升級指定版本或關閉該端口重啓服務,小編所在的部門關於tomcat外置服務器AJP端口早已關閉,得益於前技術總監的優化建議。
以下是關於前技術總監關於tomcat優化的建議,拿小本本記下的內容:
1.關閉AJP端口8009
在tomcat前再使用web服務器時,即便tomcat提供的都是靜態資源文件,情況都要比直接使用http連接差的多,如果確實有需要集成前置服務器,走AJP協議要比http協議性能更好。通常前置服務器有nginx做靜態伺服器和方向代理足矣,無需使用AJP,不用的資源直接關掉即可。
2.關閉access_log
外置tomcat服務器server.xml中會輸出access_log日誌,基本沒有什麼價值,可以關閉了。springboot中內置的tomcat默認就是關閉access_log的。
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
3.關閉無用的servlet
有些無用的servlet配置也可以去掉,例如未使用jsp可以關掉相關的配置。
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
4.war包與tomcat分離開
不要直接把war包上傳到webapps下發布,應該將war包放到指定的目錄,並在conf/Catalina/localhost目錄下添加相應的配置文件,內容如下。
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\demo.war" />
5.生產環境禁止啓用屬性的reloadable=true
reloadable是需要線程監聽程序文件修改的,然後重新加載web應用,默認值是false(不同版本可能有差異),開發測試可以啓用。
6.連接器connector使用線程池
server.xml文件中有註釋掉的相關配置,合理設置線程池最大值,最小值,最大連接數,超時時間等,可通過jemeter進行壓力測試,沒有放之四海皆準的配置。namePrefix可以自定義方便標識。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-star-"
maxThreads="200" connectionTimeout="20000" minSpareThreads="10"/>
7.jsp預編譯
我們知道jsp是通過servlet寫出的,所以訪問jsp頁面會進行編譯操作,jsp->java->class,提前把jsp編譯成class可以減少運行時編譯,當然這需要因地制宜。
8.連接器配置protocal
設置協議處理傳入的流量,默認值是HTTP/1.1,tomcat會自動選擇apr(如果存在相關本地庫)或java nio,也可指定協議。
org.apache.coyote.http11.Http11NioProtocol -non blocking Java NIO connector
org.apache.coyote.http11.Http11Nio2Protocol -non blocking Java NIO2 connector
org.apache.coyote.http11.Http11AprProtocol -the APR/native connector.
9.合理設置JAVA_OPTS
相關設置需要結合服務器信息(內存,處理器等),可以打開gc日誌,使用jemeter壓測進行相應調整,適當調整各代大小減少gc。
set "JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Xss512k -Xloggc:/star_gc.log -XX:+PrintGCDetails -XX:+UseG1GC"
10.有關session管理
如果有會話管理,可以直接使用tomcat生成的sessionId策略,無需自己再生成一套sessionId,或者實現SessionIdGenerator 定義自己的session管理,儘量減少重複性工作。
覺得有用,點個關注,【碼農小麥】公衆號同