web-dev-qa-db-ja.com

一部のディレクトリに対してSSLを使用したアクセスのみを許可するようにApacheを制限する

SSLを使用してのみアクセスする必要があるいくつかのサービスをホストするSSL証明書を備えたApache 2.2サーバーがあります。

つまり:https://myserver.com/topsecret/はhttp://myserver.com/topsecret/は拒否するか、理想的にはhttpsにリダイレクトする必要があります。 http://myserver.com/public にはこの制限がなく、httpまたはhttpsのいずれかを使用して動作するはずです。
httpを許可/拒否する決定は最上位ディレクトリで行われ、その下のすべてのコンテンツに影響します。

この方法でアクセスを制限するためにApache構成に配置できるディレクティブはありますか?

33
DrStalker

SSLRequireSSL ディレクティブが探しているものです。

<VirtualHost>、または仮想ホストを使用していない場合はトップレベル:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

または.htaccess

SSLRequireSSL
38
Thomas

グローバル構成では、次のものを使用できます。

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

同様に、セキュリティで保護されたディレクトリツリーの最初のディレクトリにある.htaccessファイルを使用できます。

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} !on
   RewriteRule .* https://%{HTTP_Host}/%{REQUEST_URI} [R=301,L,QSA]
</IfModule>

最後の1つは、グローバルまたは仮想ホスト構成のディレクトリディレクティブ内に配置することもできます。

8
who

誰かがSSLRequireSSLについて言及しましたが、それだけでは機能しないと思います。成功した例は見つかりませんでした。推奨される方法は https://wiki.Apache.org/httpd/RedirectSSL 私はそれを適用しましたが、うまく機能します!

1
Robert

あるいは、Apacheの構成オプションを使用するのではなく、サーバー側の言語を使用して処理を行うこともできます(サーバーの構成にアクセスできない場合)。

たとえば、PHPの場合:

if (!isset($_SERVER['HTTPS'])) {
  // put your redirect here
  header('Location: http://myserver.com/public');
}

(ただし、注意してください-Microsoft IISでISAPIを使用している場合、要求がnot HTTPS経由でルーティングされると、$ _ SERVER ['HTTPS']変数の値は "off"になります")

1
Magsol

VirtualHostディレクティブを使用していると仮定すると、

アクセスを拒否する非SSL仮想ホストにDirectoryディレクティブを配置します。

次に、アクセスを許可するssl virtualhostにDirectoryディレクティブを配置します。

0
Chris

このmod_rewriteは常に.htaccessファイルで行いましたが、メインの構成ファイル内でも行うことができるはずです。

これを実現するためのいくつかの方法を示したガイドを次に示します。 Smart HTTP and HTTPS RewriteRule Redirects

0
Jason Wadsworth