使用 MAMP (4.0.6) 同时运行 SSL 和非 SSL 站点

Posted

技术标签:

【中文标题】使用 MAMP (4.0.6) 同时运行 SSL 和非 SSL 站点【英文标题】:Running SSL and non-SSL sites simultaneously with MAMP (4.0.6) 【发布时间】:2017-04-17 07:26:47 【问题描述】:

为了启用 SSL,我在 httpd.conf 中取消了对这一行的注释:

# Secure (SSL/TLS) connections
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

httpd-ssl.conf 文件本身我保持不变,并在默认情况下为自签名 SSL 证书创建了 .crt 和 .key 文件:

SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"

回到主 httpd.conf,我为我想使用 SSL 的站点创建了一个 VirtualHost,并像这样配置以最终让它工作:

NameVirtualHost *
<VirtualHost *>
DocumentRoot "/Users/jonnott/Documents/sslsite1.dev"
ServerName sslsite1.dev:443
ServerAlias www.sslsite1.dev
SSLEngine on
SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"
</VirtualHost>

这个 SSL 站点现在可以正常工作了。

但是,我遇到的问题是,现在每当我尝试访问任何本地非 SSL 主机时,都会收到此错误:

Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

这些其他非 SSL 站点在 httpd.conf 中配置如下:

<VirtualHost *> 
DocumentRoot "/Users/jonnott/Documents/site2.dev"
ServerName site2.dev
ServerAlias www.site2.dev
</VirtualHost>

我错过了什么/做错了什么?

【问题讨论】:

尝试将启用 SSL 的虚拟主机限制为端口 443。使用 &lt;VirtualHost *:443&gt; 而不是 &lt;VirtualHost *&gt; 要继续@AnandBhat 所说的,您需要两个虚拟主机:一个用于 http,另一个用于 https。请参阅 serverfault.com/a/253247/367929 了解其外观示例。 @AnandBhat 这并没有什么不同,不幸的是:( @DavidDuponchel 我知道我需要不同的虚拟主机,但我的问题是,如果我的 httpd.conf 包含 httd-ssl.conf,那么我所有的非 SSL 主机都会收到 400 Bad Request 响应. 在默认的 httpd-ssl.conf 中有一个 VirtualHost 指令&lt;VirtualHost _default_:443&gt; ... &lt;/VirtualHost&gt;,但是如果我完全删除它,那么 SSL 将停止工作(并且我的非 SSL 主机再次正常)。我不知道_default_的意义是什么,也不知道常规的httpd.conf中有_default_的对应指令?? 【参考方案1】:

我想我读完这篇文章后就明白了:

http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

在我的 VirtualHost 指令开始之前,我的 httpd.conf 中需要这两个:

NameVirtualHost *:80
NameVirtualHost *:443

..然后每个虚拟主机都需要特定于端口:

<VirtualHost *:80>
DocumentRoot "/Users/jonnott/Documents/Projects/site1"
ServerName site1.dev:80
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/Users/jonnott/Documents/Projects/site1"
ServerName site1.dev:443
SSLEngine on
SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"
</VirtualHost>

【讨论】:

以上是关于使用 MAMP (4.0.6) 同时运行 SSL 和非 SSL 站点的主要内容,如果未能解决你的问题,请参考以下文章

cURL 错误 60:SSL 证书问题,anche con cacert.pem

在 mamp 免费版上使用 nginx 设置 vhost

如何更改在 MAMP 上运行的 Django 项目数据库名称?

在 Boost.Asio 中同时使用 SSL 套接字和非 SSL 套接字?

如何在 MAMP 安装上从终端运行 mysql 命令?

虚拟主机无法在 MAMP 上运行