启用 SSL 后禁止虚拟主机

Peo*_*eon 5 apache-2.2 apache-2.4

我为 wamp64 服务器启用了 SSL,对于http://localhost/https://localhost/一切正常。

但是我没有启用它来查看 localhost - 我需要为我的 1 个虚拟主机激活:

<VirtualHost *:443>
    DocumentRoot "D:/DEV/www/app/public/"
    ServerName dev.app.com:443
    ServerAdmin admin@localhost
    ErrorLog "D:/wamp64/www/ssllogs/ssl_error.log"
    TransferLog "D:/wamp64/www/ssllogs/ssl_access.log"
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile "D:/wamp64/ssl.crt/server.crt"
    SSLCertificateKeyFile "D:/wamp64/ssl.key/server.key"

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    <Directory "D:/DEV/www/app/public">
        SSLOptions +StdEnvVars
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order deny,allow
        Allow from all
    </Directory>

    BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
    CustomLog "D:/wamp64/www/ssllogs/ssl_request.log" \
    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

当然,它仍然在 httpd-vhosts.conf 中有这个

<VirtualHost *:80>
    ServerName dev.app.com
    DocumentRoot d:/dev/www/app/public
    <Directory  "d:/dev/www/app/public/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

现在,该http版本运行良好,但https给了我:

Forbidden

You don't have permission to access / on this server.
Apache/2.4.17 (Win64) OpenSSL/1.0.2h PHP/5.6.16 Server at dev.app.com Port 443
Run Code Online (Sandbox Code Playgroud)

知道有什么问题吗?

Sum*_*min 7

<VirtualHost *:443> * 匹配所有内容 - 这是一个通配符

你不应该在虚拟主机中包含端口,你已经设置了。

ServerName dev.app.com:443
Run Code Online (Sandbox Code Playgroud)

应该

ServerName dev.app.com
Run Code Online (Sandbox Code Playgroud)

您无权访问 / 在此服务器上。Apache/2.4.17 (Win64) OpenSSL/1.0.2h PHP/5.6.16 服务器在 dev.app.com 端口 443

这是语法错误的结果 - Apache 2.4 的语法已更改

Order deny,allow
Allow from all
Run Code Online (Sandbox Code Playgroud)

变成

Require all granted
Run Code Online (Sandbox Code Playgroud)

有关访问控制语法更改的完整参考,请参见此处 https://httpd.apache.org/docs/2.4/howto/access.html