记一个 Apache 配置问题

在一个运行 CentOS 6.7 系统的主机上给网站配置 SSL 加密访问特性的时候遭遇一个问题。虽然配置过程是按照早先的经验而来,配置文件也是按照以前的模板改编的,但是重启 httpd 服务后通过 HTTPS 访问网站却总是打开 Apache 的测试页面。该页面中提示没有 /var/www/html 目录的访问权限。

这个目录是默认的 Apache 虚拟主机目录,却并不是我设置的网站的根目录。所以肯定是配置文件出了问题。捣腾了几个小时之后,忽然发现是因为我通过 FileZillaSSH 修改、上传配置文件造成的。新创建的配置文件通过 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_ 的虚拟主机配置,可以给全部注释掉;如果不注释掉,最好修改其中的 SSLProtocolSSLCipherSuiteSSLCertificateFile 以及 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”,反正是无法正常访问。

有的时候错的真是莫名其妙。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/a-problem-of-apache-configuration/>。转载请保留此信息及相应链接。

2 条关于 “记一个 Apache 配置问题” 的评论

    • 嗯,因为那个文件夹在 Windows 分区,默认上传之后就是这样子了。后来我把那个文件夹文件的默认权限都改成了 644,现在新建文件上传上去就是 644 的权限了。

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)