apache - 在 Apache 2.2.3/CentOS 5.9 上使用 SSL 的基于名称的虚拟主机

标签 apache ssl virtualhost

您好,我正在尝试为一个站点提供两个子域,并且两个子域都应使用 SSL。我已经购买并安装了通配符 SSL 证书。在我的 vhosts 文件中,我有 5 个定义,www (80)、app (80/443) 和 staging (80/443)。所有子域都在端口 80 下工作。

这是我的 vhosts.conf 文件的片段:

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
  ServerAdmin support@---
  ServerName app.---
  DocumentRoot /var/www/vhosts/---/app/www/
  ErrorLog /var/www/vhosts/---/app/log/error.log

  <Directory "/var/www/vhosts/---/app/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin support@---
  ServerName app.---
  DocumentRoot /var/www/vhosts/---/app/www/
  ErrorLog /var/www/vhosts/---/app/log/ssl.log

  SSLEngine ON
  SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
  SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt

  <Directory "/var/www/vhosts/---/app/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin support@---
  ServerName staging.---
  DocumentRoot /var/www/vhosts/---/staging/www/
  ErrorLog /var/www/vhosts/---/staging/log/error.log

  <Directory "/var/www/vhosts/---/staging/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin support@---
  ServerName staging.---
  DocumentRoot /var/www/vhosts/---/staging/www/
  ErrorLog /var/www/vhosts/---/staging/log/ssl.log

  SSLEngine ON
  SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
  SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt

  <Directory "/var/www/vhosts/---/staging/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

如果我改变这一行:

<VirtualHost *:443>

收件人:

<VirtualHost SERVER_IPADDRESS:443>

第一个定义将按预期工作并使用正确的证书。当我重新启动 Apache 时,我在终端中收到一条消息,指出存在重复的条目,并且只会使用第一个条目。

使用上面的 conf,我没有在终端中收到任何错误或警告,但我在 Apache 的日志中看到了这一点:

[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!

根据我在网上阅读的内容,警告是预料之中的,应该不是问题。

运行 configtest 显示语法正常。

问题似乎是使用 SSL 命名的虚拟主机。我已经在线检查了 3 个指南并尝试了各种方法(使用 *.domain.com 作为服务器名称,app.domain.com 作为 ServerAlias),子域作为指令(app.domain.com:443)但是不能不要找出正确的组合来仅使用一个 IP 地址为 80 和 443 下的每个子域提供服务。

我知道这是可能的。关于我遗漏的任何想法?

最佳答案

检查您使用的 apache 版本。可能是你的apache太老了,不支持。我认为 sni 在 apache 2.2.12 及更高版本中得到支持。

关于apache - 在 Apache 2.2.3/CentOS 5.9 上使用 SSL 的基于名称的虚拟主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472872/

相关文章:

wamp - 如何摆脱 laravel on wamp 中的公共(public)路径

mysql - 使用Docker进行本地Web开发的HTTPS和MySql问题

python - 这两种运行 Django 的配置有什么区别?

apache - 在 Apache 运行时 APR 中限制文件夹访问

php - Apache 不从 PHP 加载模块

docker - 通过 Docker 在 localhost 上使用 SSL 运行 jenkins

ssl - 如何在 WSDL First CXF Framework Web 服务中配置 SSL?

macos - MAMP 在哪里保存其 Web 服务器配置文件?

r - 从 stats.nba.com 抓取数据,在 curl::curl_fetch_memory(url, handle = handle) 中获取错误

redirect - Nginx反向代理导致无限循环