Apache 2.4.25 以降でホスト名のアンダースコアで 400 が出る場合の対処方法
Apache の 2.4 系では、ホスト名にアンダースコア( _
)が含まれるパターンがバージョン 2.4.25 より禁止されました。
そもそも、 RFC 的にアンダースコアはドメイン名に含むことができないものとされていますが、バージョンの低い Apache ではそれに反してアンダースコアを許容する形になっていました。 その制限が Apache 2.4.25 で見直され(= RFC が適切に適用されるようになり)、アンダースコアを含んだドメインでウェブコンテンツを提供しようとすると 400 Bad Request が出るようになりました。
私はローカルの開発環境でちょうどアンダースコアを含むドメイン名を使ってしまっており、この問題に遭遇しました。
解決方法は主に次の 2 通りの方法になります。
- a. 一時的にアンダースコアを許容する
- b. アンダースコアをやめる
a. 一時的にアンダースコアを許容する
何らかの理由でドメイン名にアンダースコアが含まれた形を保つ必要がある場合は、一時的に _
を許容するというのが現実的な解決策です。
これは Apache の設定ファイル httpd.conf に次の行を追加することで実現することができます。
HttpProtocolOptions Unsafe
設定を反映するには再起動が必要です。
b. アンダースコアをやめる
当然ですが、アンダースコアがホスト名に入っているパターンが RFC 的には許可されていないとのことなので、アンダーススコアを削除したパターンに変更しましょう。