私はUbuntuの専門家ではありませんが、2年間、問題なく2台のサーバーを実行しています。
昨夜、そのうちの1つでローカルWebサイトにアクセスしようとすると、エラーが発生しました。
**Bad Request**
Your browser sent a request that this server could not understand.
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.
数時間のフラストレーションと成功なしの後、私はサーバーを再構築しました。 Ubuntuのインストール中に他のサーバーに移動すると、まったく同じエラーが発生しました。これで最初のサーバーが再構築され、同じエラーが表示されます。
ネットワーク上のすべてのコンピューターをシャットダウンしました。ルーターの電源を切り、最初からやり直しました。
2台のサーバーに加えて、ネットワークは3台のWindowsマシンとUbuntuデスクトップで構成されています。
マシンをインターネットから隔離しようとしました。有線クライアントと無線クライアントの両方を試しました。
サーバーのlocalhostに移動すると、Ubuntu Apacheのデフォルトページが表示されます。
問題が発生したときに起こった唯一のことは、Windowsが更新のためにこのマシンをシャットダウンすることを決定したことです。これがどのように問題を引き起こしているのかわかりませんが、このマシンをネットワークから切り離しましたが、問題は存在します。
Cookieをクリアし、5つの異なるブラウザーを使用しましたが、すべて同じエラーが報告されました。私はアイデアが不足しており、提案を探しています。
私の場合、実際にはアンダースコア_
DocumentRootで問題を引き起こし、デバッグに何時間もかかります。 DocumentRootパスから削除すると、すべて正常に機能します。
これは、RFC 3986の更新によるもので、仮想ホストサーバー名やその他の要素ではアンダースコアは安全ではないと主張しています。私の場合、URL名を変更できなかったため、これらの安全でないURLを有効にして、このアンダースコアを許可しました。これを行うには、httpd.confファイルに安全でないHttpProtocolOptionsを追加します。
https://httpd.Apache.org/docs/2.4/mod/core.html#httpprotocoloptions
Httpd.confファイルに安全でないHttpProtocolOptionsを追加する必要がある場合、新しいバージョンのhttpdはURLでハイフンをサポートしません。その後は正常に動作します。
さて、カプセルの助けを借りて問題を発見したことは99.99%確信しています。成功の鍵は、Apacheのエラーレベルをデバッグに変更することでした。これは私に出発点を与え、そこから少しの試行錯誤があり、すべてが順調でした。
ローカル開発に使用した2台のサーバーB777とB767がありました。開発用ウェブサイトには、www.something.767やwww.something.777のようなものを使用しました。すべてのサイトがホストファイルにリストされました。
数年間、これはうまく機能しました。何らかの理由で、私は理解できないかもしれませんが、昨晩、私は両方のサーバーと、今晩作成した別のサーバーで前述のエラーを受け取り始めました。
問題はドメイン名に数字を使用していたようですドメイン名をwww.something.767からwww.something.local(または明らかに数字以外の文字)に変更するとすぐに正常に戻りました。
ServerName
ディレクティブからアンダースコア(_
)と/etc/hosts
のホスト名を削除する必要がありました。
ただし、DocumentRoot
の下線は問題ありません。
したがって、/etc/hosts
の関連する行は次のようになります。
127.0.0.1 mycoolsite.localhost
/etc/Apache2/extra/httpd-vhosts.conf
の関連ブロックは次のようになります。
<VirtualHost *:80>
DocumentRoot "/Users/satoshi/Sites/my_cool_site"
ServerName mycoolsite.localhost
ErrorLog "/private/var/log/Apache2/my_cool_site.localhost-error_log"
CustomLog "/private/var/log/Apache2/my_cool_site.localhost-access_log" common
</VirtualHost>
変更を行った後、apachectl restart
を実行することを忘れないでください。
Docker Composeでは、コンテナ名をURL /ホストとして使用して相互に通信できるネットワークを使用する場合、名前にアンダースコアを使用しないようにする必要があります( Nero's answer =)。
これはデバッグに永遠にかかりましたので、最初のエラーテキストを(もう一度)含めます。Googleが、Dockerネットワークでphp curlを修正しようとする次の人にこの質問をもう少し上手く提供できるように。
400悪いリクエスト悪いリクエスト
ブラウザが、このサーバーが理解できないリクエストを送信しました。
さらに、ErrorDocumentを使用して要求を処理しようとしたときに、400 Bad Requestエラーが発生しました。
このエラーは私がついにそれを手に入れるまで何日間も悩まされていました。
私の場合、最後に空のスペースがあるURLへのCURLを作成していました。信じられますか?スペースを削除するだけで十分に機能しました。