我正在尝试学习 Apache 服务器配置的基础知识,并想知道 Apache 上不同范围内 SSL 指令的有效性。
这些指令;
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/apache.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/apache.key"
SSLRequireSSL ...
它们可以放在哪里?只能放在 VirtualHost 部分吗?如果我把它们放在全局范围内,它们会起作用吗?
抱歉,如果这个问题与上下文无关,我仍然对 Apache 有一些全面的疑问:)
答案1
欢迎来到 Apache 的世界!第一课是学习如何阅读优秀的文档。在 Apache 文档中,每个指令都有一个语境部分指示该指令在服务器配置文件中的哪个位置是合法的。它位于Syntax:
和Default:
行的正下方。
服务器配置这意味着该指令可以在服务器配置文件(例如
httpd.conf
)中使用,但不能在任何<VirtualHost>
或容器中使用。它根本<Directory>
不允许在文件中使用 。.htaccess
虚拟主机此上下文意味着该指令可能出现在
<VirtualHost>
服务器配置文件的容器内。目录在此上下文中标记为有效的指令可以在服务器配置文件中的
<Directory>
、、、和容器内使用,但须遵守配置部分中概述<Location>
的 限制。<Files>
<If>
<Proxy>
.htaccess如果指令在此上下文中有效,则意味着它可以出现在每个目录的 .htaccess 文件中。它可能不会被处理,但取决于当前活动的覆盖。
和SSLEngine
,SSLCertificateFile
,SSLCertificateKeyFile
上下文是服务器配置和虚拟主机。这意味着您可以为整个服务器指定它们,也可以覆盖每个的默认配置<VirtualHost>
。
这SSLRequireSSL
指示另一方面,在目录和 .htaccess 上下文中是合法的。这意味着,通过将其放在目录中,您可以指定不允许非 TLS 连接,即使存在一个单独的 HTTP 虚拟主机来为该目录提供服务。
然而,在当今时代,你应该使用 TLS 保护一切,这毫无SSLRequireSSL
必要。将所有 HTTP 重定向到 HTTPS 并通过HTTP 严格传输安全(HSTS)政策(RFC 6797)。