web-dev-qa-db-ja.com

同じサーバー上に複数のサイトがあり、HTTP / HTTPSのルールが異なると、安全でないサイトは別の安全なサイトにリダイレクトされます

いくつかのサイト(すべて同じIPアドレスから)を提供するApacheサーバーがあります。

サイトAは、HTTPおよびHTTPS経由でアクセス可能でなければなりません。

サイトBはのみ HTTP経由でアクセス可能である必要があります-https経由ではアクセスできません。

サイトAは正常に機能しますが、サイトBは問題を引き起こしています。ユーザーがhttps://SiteBにアクセスしようとすると、https://SiteAにリダイレクトされます。

サイトAの構成は次のようになります。

# 001-SiteA.conf:
<VirtualHost *:80>
  ServerName SiteA
  ServerAlias SiteA
  # ...
</VirtualHost>

# 001-SiteA-SSL.conf:
<VirtualHost *:443>
  ServerName SiteA
  ServerAlias SiteA
  # ...
</VirtualHost>

# 002-SiteB.conf
<VirtualHost *:80>
  ServerName SiteB
  ServerAlias SiteB
  # ...
</VirtualHost>

望ましいのは、ユーザーが404エラーまたは空のページなどを取得することですが、間違いなくnot SiteAのコンテンツです。

https://SiteBがユーザーをhttps://SiteAにリダイレクトしているのはなぜですか。

名前ベースの仮想ホストのApacheドキュメント 状態(強調は彼らのものです):

IPとポートの組み合わせに対するデフォルトの名前ベースの仮想ホスト

最も具体的な一致するIPアドレスとポートの組み合わせを含む仮想ホストのセットに一致するServerNameまたはServerAliasが見つからない場合、最初にリストされた仮想ホスト使用される一致。

siteB:443に仮想ホストが定義されていないため、IPアドレスとポート番号に一致する最初のホストであるため、デフォルトでsiteA:443に設定されています。

これを解決する方法は2つあります。

  1. siteB:443の仮想ホストを作成します
  2. 不明なホスト名を処理する仮想ホストを作成します。エラーコードを返してもらいます。 0000-default-site.conf0000-default-site-ssl.confのような構成ファイルに名前を付けて、リストの最初に来るようにします

デフォルトのサイトソリューションをお勧めします。そうしないと、サーバーを指す任意のランダムなホスト名に対してSiteAが提供されます。

1