Apache 2.4とTomcat 7を実行している新しいマシンにwebappのバージョンを設定しているため、ログインできません。現在のサイトはApache 2.2およびTomcat 6上で動作しています。Apache 2.4(ただし2.2ではない)のTomcat/AJPでのPOSTパラメータに関する問題
デバッグでは、request.getParameter()
が2.4サイトのみでnull
を返していることが示されています。
これはすべてのブラウザでチェックして、サイトを操作するので、AJPは少なくとも部分的に機能します。フォームデータが私のTomcatには見えないというフォームを投稿するときだけです。
構成の両方で同じである。
として<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAlias cdn.example.com
ServerAlias prod.example.com
ProxyPreserveHost On
ProxyPass /images/ !
ProxyPass /font/ !
ProxyPass /style/ !
ProxyPass/ajp://localhost:8009/ retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse/ajp://localhost:8009/
そしてserver.xmlの定義におけるコネクタ:
<Connector port="8009" address="localhost"
maxThreads="250" minSpareThreads="5" maxSpareThreads="15"
connectionTimeout="200000"
packetSize="16384"
maxHttpHeaderSize="16384"
enableLookups="false" redirectPort="8443"
emptySessionPath="true" URIEncoding="UTF-8" protocol="AJP/1.3"/>
ブラウザリクエストヘッダである:
Host: prod.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es,sv;q=0.9,de;q=0.8,en;q=0.6,es-MX;q=0.5,en-AU;q=0.4,ja;q=0.3,fr;q=0.1
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 73
Referer: http://prod.example.com/en_US/auth/login.action
Cookie: JSESSIONID=07FB9E1A02A4464C0D65B332B53EF02F
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Iが有効ポート8080経由で直接Tomcatにアクセスし、ログインもこの方法でうまく動作します。
コードは同じgit repoとブランチから来ているので、他のものはすべてレガシーサイトと同一である必要があります。これを追跡するためにTomcat 7またはApache 2.4の変更を調べるべきですか?
更新:投稿するように設定された非常に単純なtest.jspを作成しました。私は使用します...
Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String name = (String) paramNames.nextElement();
String[] values = request.getParameterValues(name);
..パラメータをダンプします。直接8080のURLを介して、これは完全に動作しますが、Apache/AJPを介してすべてのPOSTパラメータは無視されますが、手動でGETパラメータをURLに追加すると例: ?test=123
これらはうまく動作します。
アップデート2:私は私のtest.jsp
にrequest.getReader()
の出力を追加しましたし、私のPOSTデータは、例えば、正しくそこに表示されますt1=Some+text&t2=Testing
でも、request.getParameter("t1")
はまだnull
です。私は本当にばかげた何かを逃しているに違いない。
アップデート3:私はもともとこれは、SSLは、関連するが、今非SSLのVirtualHostを設定していると、これは正確に同じ問題を抱えていると思いました。私のテストページには日付スタンプがあるので、キャッシュの問題ではないようです。
更新4:私はちょうど、フォームのPOSTデータを正しく処理することを可能にする、以下の変更作ら:だから
# ProxyPass/ajp://localhost:8009/ retry=1 acquire=3000 timeout=600 Keepalive=On
# ProxyPassReverse/ajp://localhost:8009/
ProxyPass/http://localhost:8080/ retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse/http://localhost:8080/
を、これは、ApacheやTomcatのバグのように見えますか?
これは小さなデータパケット、つまり入力テキストが数文字のフォームにも適用されます。 AJP経由でフォームデータを正しく処理していないTomcatのようですが、バイトは依然として 'request.getReader'で利用可能です。 –
パフォーマンス上の理由からAJP(HTTP経由)でProxyPassを使用したかったのです。 –