使用 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。使用<VirtualHost *:443>
而不是 <VirtualHost *>
要继续@AnandBhat 所说的,您需要两个虚拟主机:一个用于 http,另一个用于 https。请参阅 serverfault.com/a/253247/367929 了解其外观示例。
@AnandBhat 这并没有什么不同,不幸的是:(
@DavidDuponchel 我知道我需要不同的虚拟主机,但我的问题是,如果我的 httpd.conf 包含 httd-ssl.conf,那么我所有的非 SSL 主机都会收到 400 Bad Request 响应.
在默认的 httpd-ssl.conf 中有一个 VirtualHost 指令<VirtualHost _default_:443> ... </VirtualHost>
,但是如果我完全删除它,那么 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 上运行的 Django 项目数据库名称?