【发布时间】: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_的对应指令??
标签: apache ssl mamp virtualhost httpd.conf