限制Apache仅允许使用SSL访问某些目录


34

我有一台带有SSL证书的Apache 2.2服务器,该服务器托管了一些只能使用SSL访问的服务。

即:应该允许使用https://myserver.com/topsecret/,而应该拒绝http://myserver.com/topsecret/或将其重定向到https。 http://myserver.com/public不应有此限制,并且应使用http或https进行工作。
允许/拒绝http的决定是在顶级目录中做出的,并且会影响其下的所有内容。

是否可以在Apache配置中放置指令以这种方式限制访问?

Answers:


38

SSLRequireSSL指令是你在找什么。

<VirtualHost>或内部,如果您不使用虚拟主机,则在顶层:

<Directory /topsecret>
  SSLRequireSSL
</Directory>

或在.htaccess

SSLRequireSSL

1
欢迎来到服务器故障!我们确实希望答案具有内容,而不是内容的指针。从理论上讲,这可能会回答问题,但是最好在此处包括答案的基本部分,并提供链接以供参考。谢谢!
克里斯S

8
好的,我用示例更新了我5岁的帖子:)
Thomas

1
公平地说,无论是否已使用5年,其原因都是您指向的链接可能会消失,从而使您的答案对于后来来找信息的人来说大部分或完全没有用。因此,我实际上投票赞成(诚实)您的过时评论,但我也完全同意,答案应具有一定的上下文,以便它仍然有用。特别是因为它被标记为正确答案。
Craig 2015年

我认为SO / SF社区对“仅链接”的要求不那么严格,而“ lmgtfy”的答案就在那时。但是我同意;随时进行追溯编辑是有意义的。
汤玛斯(Thomas)

我会将该指令语句添加到哪个配置文件中?
丹·卡特

8

在全局配置中,您可以使用:

<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>

最后一个也可以放在全局或虚拟主机配置中的目录指令中。


将HTTP重定向到HTTPS会使您受到某些类型的MiTM攻击。请注意。
Craig

1

或者,您可以使用服务器端语言为您执行处理,而不是使用Apache的配置选项(如果可能,您无权访问服务器的配置)。

例如,使用PHP:

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

(尽管请注意,如果您在Microsoft IIS上使用ISAPI,如果请求通过HTTPS进行路由,则$ _SERVER ['HTTPS']变量的值将为“ off”)



0

假设您使用的是VirtualHost指令,

将Directory指令放在拒绝访问的非SSL虚拟主机中。

然后,将Directory指令放置在ssl virtualhost中以授予访问权限。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.