web-dev-qa-db-ja.com

フォーム送信を妨害するApache2.4のKeepAlive

サーバーをDebianJessieにアップグレードしました。これには、Apache 2.4.10(以前は2.2)とPHP5.6が含まれています。

現在、SSLサイトはIE11およびiPad Safariで一部の状況でフォームを送信しません(デスクトップSafariについてはよくわかりません)。 FirefoxとChromeはどちらも問題ありません。失敗すると、IEでIEエラーページ「このページを表示できません」が生成されます。強調しておきますが、サイトにアクセスしてフォームを見ることができます。フォームの送信が失敗します。

これは、何らかの形でキープアライブとSSLに関連しています。 SSL VirtualHostでKeepAliveをオフにすると、問題は解決します。 (SNIを使用していますが、エラーを示しているサイトの1つは最初のSSLサイトです)。私はmpm-itkを使用しています(そしてアップグレード前でした)。

IE11(Windows 7)では、* SSL(HTTPS)* Apache KeepAlive On、KeepAliveTimeout 5(デフォルト)*ファイルがアップロードされたフォーム(つまり、enctype = multipart/form-data)で発生します。*ファイルが実際にある場合のみ提供されます(他のフィールドがあるファイルがなくても、他のフィールドがある場合でも問題ありません。1バイトのファイルでも、ファイルサイズに依存せずに失敗します)。 *フォームを表示してから60秒以内にアップロードが開始された場合のみ(つまり、[送信]を押す前に60秒放置しても問題ありません)

何が失敗したかについての手がかりはありません。サーバーログには、サーバーに再度接続したことを示すものは何もありません。エラーはすぐに発生します。 IEデバッガーには、ネットワークページの結果列に「(中止)」と表示され、「ナビゲーションが発生しました:ファイル:dnserror.htm」と表示されている以外は何もありません。が表示されていますが、名前にもかかわらず、私が知る限り、DNSエラーはありません。送信ボタンを押しても、Fiddlerにネットワークトラフィックが表示されません。 Windowsイベントビューアには何も関係ありません。これはそれについての最も奇妙なことです-それは試みさえしないようです。

Apache 2.4の場合、ここで推奨されているようにSSLを設定しました: https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=Apache-2.4.10&openssl=1.0 .1k&hsts = no&profile = intermediate 。 CiperSuiteは私の2.2セットアップから変更されていませんが、OCSPステープがオンになっています。主な2.4の変更はTLS1.2です(しかし、Fidlerはこれをダウングレードすると私は信じているので、そうなる可能性は低いです)。 HSTSはオンになっていますが、以前はオンでした。 SSLLabsはサイトにA +の評価を与え、エラーを示しません。

KeepAliveTimeoutを60に変更してみました。また、古いBrowserMatch "。MSIE。" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 and BrowserMatch "。MSIE。 "ssl-unclean-shutdown実験として、これにはある程度の効果があると思います。つまり、最初の試行後に機能するということです。ただし、新しく起動したブラウザからの最初のアクセスは引き続き失敗します。おそらくこれは、SSLネゴシエーションが終了するまでブラウザを判別できないためですが、それ以降はブラウザに詳細情報がありますか? 60秒以内にこのプロセスを実行できない可能性もあるので、とにかく2回目は問題ありません。

問題を示す小さなテストサイトを作成しました: https://iet.davidearl.uk 。テストケース専用の自己署名証明書があるため、最初にそこに行くと証明書の警告が表示されますが、問題のある実際のサイトには当てはまりません。テストケースでサーバー側が行うのは、送信されたファイルのファイル名をエコーすることだけです。それ以外の場合は、HTMLソースがすべてです。

IPadでは、どちらかといえば問題はもっとひどいようだ。フォームをまったく送信できないようです(ファイルがアップロードされているかどうかに関係なく、フォームは正常に表示されます)。フォームの作成方法によっては、ハングする場合もあれば、内部でエラーページが生成される場合もあります(「ネットワーク接続が失われたため、Safariはページを開くことができません」)。繰り返しになりますが、一般的な要因は、60秒待ってから送信ボタンを押すと機能することです。ただし、古いバージョンのSafari for PC(5.1.7)は問題なく動作します。

Windows 7(の別のコピー)上のIE9はiPadSafariのように動作します-フォームを表示してから60秒待たないとハングします。 Windows10のMicrosoftEdgeおよびSurfaceIEタブレットのRTも、IE11と同じように失敗するようです。また、サーバーにアクセスするPHP "file_get_contents(" https ... "が、成功する前に正確に60秒間ハングするというケースもあります。これは、以前はすぐに機能していました。

私はhttpを試しました:// superuser.com/questions/516030/Apache-2-4-on-windows-responds-slowly-hangs-when-serving-some-dynamic-pages-変更なしこれはおそらく関連していますが、彼らのケースKeepAliveOffは効果がありませんでした。サーバーファイアウォールを一時的にオフにしても違いはありません:http:// serverfault.com/questions/678009/windows-8-ie-10-tls-handshake-errors-to-Apache-2-2-on-centos-6- 6 SSLCipherSuiteを並べ替えて、ECDHE-RSA-AES128-SHA256をリストの上位に配置しようとしました(たとえば、ここで提案されているように:http:// serverfault.com/questions/677338/why-is-internet-Explorer-11-に接続できません-https-sites-when-tls-1-2-is-ena)インターネットプロパティのSSL状態をクリア>コ​​ンテンツに違いはありません。

キープアライブとSSLに関連する問題は明らかに一般的ではありませんが、それが何であるかについては謎に包まれており、それを見つけるのに役立つ手がかりはありません。広範囲にわたる検索では、何も役に立ちませんでした。

2
user1247280

私はまったく同じ問題に遭遇しました(これに髪を引っ張るのにかなりの数日を費やしました!)。

これはmpm-itkのバグであることが判明しました(cf. http://lists.err.no/pipermail/mpm-itk/2015-September/thread.html )。このバグは、昨日リリースされた最新バージョンで修正されました。

この新しいバージョンは http://mpm-itk.sesse.net/ からダウンロードできますが、ソースから自分でコンパイルする必要があります。 READMEファイルの指示に従うと、非常に簡単です。

3

Qありがとうございます!そして cividesk に答えてください。私もITKを使用しています(なぜ多くの人が使用しないのかわかりません-仮想ホスト間で特権を便利に分離できます)。

私はこのバグを潰すためにものを再コンパイルしたくありませんでした。いつかそれがジェシーになり、apt-getが魔法のように修正することを信頼したいと思いました。しかし、私のクライアントはそれまで待つことができません!

IEの下で、jQueryの特定のバージョンが他のバージョンよりも多く発生することに気づきました。そこで、使用したjQueryバージョンに戻ることで、問題の半分を修正しました。しかし、Safariは依然として問題でした。動作する場合もあれば、サイレントに失敗する場合もありました。

これを機能させる方法は、次のように編集したApache config setenvif.confファイルにありました。

BrowserMatch "Mac OS X" nokeepalive

このアイデアのクレジットは他の場所で支払う必要があります

このようにして、Macユーザーのキープアライブはオフになります。これが彼らにとって少し遅くなることは間違いありませんが、UXを殺す/ IMOが機能しないよりはましです。

0
artfulrobot