SSL을 사용하여 액세스 해야하는 여러 서비스를 호스팅하는 SSL 인증서가있는 Apache 2.2 서버가 있습니다.
즉, https : //myserver.com/topsecret/은 허용되어야하지만 http : //myserver.com/topsecret/은 거부되거나 이상적으로 https로 리디렉션되어야합니다.
http://myserver.com/public 에는이 제한이 없어야하며 http 또는 https를 사용하여 작동해야합니다.
http 허용 / 거부 결정은 최상위 디렉토리에서 이루어지며 그 아래의 모든 내용에 영향을줍니다.
이러한 방식으로 액세스를 제한하기 위해 Apache 구성에 배치 할 수있는 지시문이 있습니까?
답변
SSLRequireSSL의 지시자는 당신이 찾고있는 것입니다.
내부 <VirtualHost>
또는 가상 호스트를 사용하지 않는 경우 최상위 레벨 :
<Directory /topsecret>
SSLRequireSSL
</Directory>
또는 .htaccess
:
SSLRequireSSL
답변
전역 구성에서는 다음을 사용할 수 있습니다.
<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>
마지막 하나는 전역 또는 가상 호스트 구성에서 디렉토리 지시문 안에 배치 할 수도 있습니다.
답변
또는 Apache의 구성 옵션을 사용하지 않고 서버 측 언어를 사용하여 처리 할 수 있습니다 (아마도 서버 구성에 액세스 할 수없는 경우).
예를 들어, PHP의 경우 :
if (!isset($_SERVER['HTTPS'])) {
// put your redirect here
header('Location: http://myserver.com/public');
}
(단지 알고 있지만 Microsoft IIS에서 ISAPI를 사용하는 경우 요청이 HTTPS를 통해 라우팅 되지 않으면 $ _SERVER [ ‘HTTPS’] 변수의 값은 “off”가됩니다)
답변
누군가 SSLRequireSSL을 언급했지만 그 자체로는 효과가 없다고 생각하며 성공적인 예를 찾지 못했습니다. 권장되는 방법은 https://wiki.apache.org/httpd/RedirectSSL입니다. 적용했으며 잘 작동합니다!
답변
VirtualHost 지시문을 사용한다고 가정하면,
액세스를 거부하는 비 SSL 가상 호스트에 디렉토리 지정 문을 배치하십시오.
그런 다음 액세스 권한을 부여하는 ssl 가상 호스트에 Directory 지시문을 배치하십시오.
답변
나는 항상 .htaccess 파일 에서이 mod_rewrite를 수행했지만 기본 구성 파일 에서도이 작업을 수행 할 수 있어야합니다.
이를 수행하는 몇 가지 방법이있는 가이드가 있습니다.
스마트 HTTP 및 HTTPS RewriteRule 리디렉션