RHEL提供のTOMCAT6にはまる。

事象

アプリのパラメータが多すぎて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から落としたものを使えばよかった。

以上

おすすめの記事