事象
アプリのパラメータが多すぎてabortしてしまう。
調査
ログを詳細に出してみる。
server.xmlを書き換えて、詳細な通信ログを出す。
# vim server.xml + <Valve className='org.apache.catalina.valves.RequestDumperValve'/> ※tomcatを再起動。
これを入れると通信の内容をcatalina.outに表示できる
1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: REQUEST URI =/test/test.do 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: authType=null 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: characterEncoding=null 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: contentLength=-1 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: contentType=null 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: contextPath=/test 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: cookie=JSESSIONID=9KIF091236y17426D8AUSDF6DFGGGGGG 1 15, 2015 8:31:22 午後 org.apache.catalina.valves.RequestDumperValve invoke 情報: header=host=test.memomemomemo.info:8080 ・・・ 1 15, 2015 8:27:56 午後 org.apache.catalina.connector.CoyoteAdapter service 重大: リクエストの処理中にコネクタで例外またはエラーが発生しました java.lang.IllegalStateException: Parameter count exceeded allowed maximum: 512 at org.apache.tomcat.util.http.Parameters.addParam(Parameters.java:335) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:456) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:365) at org.apache.catalina.connector.Request.parseParameters(Request.java:2593) at org.apache.catalina.connector.Request.getParameterNames(Request.java:1106) at org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve.java:123) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:745)
Parameter count exceeded allowed maximum: 512
パラメータの数が512に制限されている。
なんでや!
tomcatのパラメータ情報を見ると10000までOKなようだ。
そのため、要調査。
そしたら、モーグルとカバとパウダーの日記さんがシェアしてくれていました!
ありがとうございます。
助かりました。
Moderate: tomcat6 security updateにて、かいてある。
どうやら、server.xmlのmaxParameterCountでは制御できず、「org.apache.tomcat.util.http.MimeHeaders.MAX_COUNT」にて制御せねばならないようです。
対応
# vim /etc/tomcat6/tomcat6.conf
+ JAVA_OPTS="${JAVA_OPTS} -Dorg.apache.tomcat.util.http.Parameters.MAX_COUNT=4096"
tomcatを再起動します。
感想
開発会社以外が手を入れているものを選定する場合、こんなことがおきるんですね。
apache software foundationから落としたものを使えばよかった。
以上