如何使用Apache运行多个启用SSL的网站以进行本地开发

时间:2013-12-03 23:27:21

标签: apache ssl https localhost multiple-sites

我正在开发一些网站,通过虚拟服务器和不同的文档根,将它们配置为基于端口进行访问。即一个网站localhost:8010,另一个网站localhost:8020

在我拥有多个站点之前,SSL只使用一个端口80和443正常工作。但是现在未经修复的站点加载正常但是对于任何一个站点都无法建立SSL连接。它似乎也没有改变端口 - 当我点击以https://开头的链接时,它会尝试转到https://localhost:8010/secure/route

我可以使用https://localhost:8010/secure/route这样的网址工作,也可以根据网站自动升级到其他端口(例如https://localhost:8011/project/one/secure/routehttps://localhost:8021/project/two/secure/route),或者只要我可以使用不同的端口和SSL在本地运行两个站点,就可以使用其他东西了!

在我的 httpd.conf 中,我有:

Listen 8010
Listen 8020

以及:

<Directory "/path/to/project/one">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

<Directory "/path/to/project/two">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

在我的 httpd-vhosts.conf 中,我有:

<VirtualHost *:8010>
    ServerAdmin zugwalt@projectone.com
    DocumentRoot "/path/to/project/one"
    ServerName localhost:8010
    ErrorLog "logs/projectone-error.log"
    CustomLog "logs/projectone-access.log" common
</VirtualHost>

<VirtualHost *:8020>
    ServerAdmin zugwalt@projecttwo.com
    DocumentRoot "/path/to/project/two"
    ServerName localhost:8020
    ErrorLog "logs/projecttwo-error.log"
    CustomLog "logs/projecttwo-access.log" common
</VirtualHost>

httpd-ssl.conf 中,我有:

Listen 443

<VirtualHost *:443>
    DocumentRoot "/path/to/project/one"
    ServerName localhost:8010
    SSLEngine on
    SSLCertificateFile /path/to/ssl/server.crt
    SSLCertificateKeyFile /path/to/ssl/server.key
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/path/to/project/two"
    ServerName localhost:8020
    SSLEngine on
    SSLCertificateFile /path/to/ssl/server.crt
    SSLCertificateKeyFile /path/to/ssl/server.key
</VirtualHost>

我在Windows 7上使用Apache 2.4

1 个答案:

答案 0 :(得分:0)

您将两个虚拟主机都定义为位于端口443 <VirtualHost *:443>上,但是每个主机都没有真实的DNS主机名! 您将服务器名称设置为localhost:8010和8020-这将不起作用,因为端口不是dns名称的一部分!

您必须具有不同的服务器名称,例如ssl1.example.com和ssl2.example.com-另一方面,您可以像为纯http:那样为ssl定义不同的端口。

<VirtualHost *:8110>
  DocumentRoot "/path/to/project/one"
  ServerName localhost
  SSLEngine on
  SSLCertificateFile /path/to/ssl/server.crt
  SSLCertificateKeyFile /path/to/ssl/server.key
</VirtualHost>

<VirtualHost *:8120>
  DocumentRoot "/path/to/project/two"
  ServerName localhost
  SSLEngine on
  SSLCertificateFile /path/to/ssl/server.crt
  SSLCertificateKeyFile /path/to/ssl/server.key
</VirtualHost>

然后使用浏览器中的端口:

  

https://localhost:8110