使用mod_rewrite模拟SSL虚拟主机?

时间:2020-03-05 18:39:03  来源:igfitidea点击:

用Apache 2.2通过SSL连接透明地重写URL的最佳方法是什么?

Apache 2本机不支持多个基于名称的虚拟主机进行SSL连接,而且我听说mod_rewrite可以提供帮助。我想做这样的事情:

我已经设置了服务器,以便可以通过以下方式访问站点

https://secure.example.com/dbadmin

但我想将其作为https://dbadmin.example.com

我如何进行设置,以使"重写"规则将dbadmin.example.com重写为secure.example.com/dbadmin,但不在客户端的地址栏上显示重写(即,客户端仍只会看到dbadmin.example.com) ),遍布https?

解决方案

回答

有apache mod_rewrite,或者我们可以设置apache将https://dbadmin.example.com定向到服务器上的path / to / example.com / dbadmin

<VirtualHost *>
ServerName subdomain.domain.com
DocumentRoot /home/httpd/htdocs/subdomain/
</VirtualHost>

回答

除非SSL证书是"通配符"或者多站点证书,否则我认为这不会起作用。重写将显示在浏览器中,并且地址栏中的名称必须针对证书有效,否则用户将看到一个安全错误(他们可以始终接受并继续,但是听起来不像我们想要的那样) )。

这里更多。

回答

配置单个VirtualHost来同时服务secure.example.com和dbadmin.example.com(使其成为唯一实现此目的的*:443 VirtualHost)。然后,我们可以使用mod_rewrite调整对dbadmin.example.com的请求的URI:

<VirtualHost *:443>
    ServerName secure.example.com
    ServerAlias dbadmin.example.com

    RewriteEngine on
    RewriteCond %{SERVER_NAME} dbadmin.example.com
    RewriteRule !/dbadmin(.*)$ /dbadmin
</VirtualHost>

SSL证书必须同时对secure.example.com和dbadmin.example.com有效。如Terry Lorber所述,它可以是通配符证书,也可以使用subjectAltName字段添加其他主机名。

如果遇到问题,请先在<VirtualHost *>上进行设置,然后检查它是否在没有SSL的情况下工作。 SSL连接和证书是一个单独的复杂性层,我们可以在URI重写工作之后进行设置。