在一个运行 CentOS 6.7 系统的主机上给网站配置 SSL 加密访问特性的时候遭遇一个问题。虽然配置过程是按照早先的经验而来,配置文件也是按照以前的模板改编的,但是重启 httpd 服务后通过 HTTPS 访问网站却总是打开 Apache 的测试页面。该页面中提示没有 /var/www/html
目录的访问权限。
这个目录是默认的 Apache 虚拟主机目录,却并不是我设置的网站的根目录。所以肯定是配置文件出了问题。捣腾了几个小时之后,忽然发现是因为我通过 FileZilla 和 SSH 修改、上传配置文件造成的。新创建的配置文件通过 FileZilla 上传之后的权限是 440
(只有属主和组有且仅有读权限),被 root 账户复制到 Apache 配置目录后还保持了这个权限设置。所以造成 apache 用户无法读取配置文件内容,因而重启 httpd 服务也没能使之生效。这才造成了上述问题。
服务器上运行的是 Apache 2.2 版本。配置文件的几个注意点再列一下。
- 安装
mod_ssl
时候自动创建的/etc/httpd/conf.d/ssl.conf
文件中已有Listen 443
的参数行,不能在虚拟主机配置中再次声明; /etc/httpd/conf.d/ssl.conf
文件中有个_default_
的虚拟主机配置,可以给全部注释掉;如果不注释掉,最好修改其中的SSLProtocol
、SSLCipherSuite
、SSLCertificateFile
以及SSLCertificateKeyFile
参数行的配置与主域名一致。
Apache 2.2 不支持 Stapling (OCSP Stapling,一种证书有效性验证的手段)。- Apache 2.2.24 之前的版本不支持
SSLCompression off
。CentOS 6.7 中目前整合的是 Apache 2.2.15。 - Apache 2.2.15 已经支持 HSTS。
- 如果要使用非标准端口,最好这样写,
Listen <port> NameVirtualHost *:<port>
也可以这样写,
Listen <port> NameVirtualHost <IP>:<port>
但是重启 httpd 服务时会有提示 “
[warn] NameVirtualHost <IP>:<port> has no VirtualHosts
”,然后 VirtualHost 配置时使用<VirtualHost *:<port>>
。如果写成<VirtualHost <IP>:<port>>
,则使用 Firefox 45 访问时会提示错误码 “SSL_ERROR_RX_RECORD_TOO_LONG” 而 Chrome 50 会提示 “ERR_SSL_PROTOCOL_ERROR”,反正是无法正常访问。
有的时候错的真是莫名其妙。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/a-problem-of-apache-configuration/>。转载请保留此信息及相应链接。
常年chown -R的路过
嗯,因为那个文件夹在 Windows 分区,默认上传之后就是这样子了。后来我把那个文件夹文件的默认权限都改成了
644
,现在新建文件上传上去就是644
的权限了。