SSL 通配符证书 - 两台服务器上的多个虚拟主机发生冲突

SSL 通配符证书 - 两台服务器上的多个虚拟主机发生冲突

我正在与一个小团队合作,我们目前有两台服务器,一台用于发布版本,另一台用于开发。我们有一个通配符 SSL 证书,因此我们可以覆盖多个子域。我在各自的服务器上设置了发布和开发分支,我们最初只在实时服务器上设置了 SSL,而开发版本是标准 HTTP。我们现在希望能够在开发服务器上设置 SSL 版本,以便为我们提供更真实的测试环境,但我们遇到了当前的问题。

我已设置实时服务器来捕获所有子域,因为我们将向不同的组织销售我们的服务,并且我们希望让他们有机会附加到 URL。当我尝试在开发服务器上为一个特定 URL 设置虚拟主机时,就会出现问题。虽然加载的登录页面位于开发服务器上,但登录会将您踢出 SSL,或者将您重定向到实时服务器(可能是因为我在实时服务器上设置了重写规则,以防止您被踢出 https)。这是我目前拥有的两个配置文件。

直播服务器

<VirtualHost *:80>
    ServerName *.fileblimp.com
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
    <IfModule pagespeed_module>
            ModPagespeed Off
    </IfModule>
</VirtualHost>
<VirtualHost *:443>
    ServerName *.fileblimp.com
    ServerAlias *
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/files
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <IfModule pagespeed_module>
            ModPagespeed Off
    </IfModule>
    <IfModule mod_php5.c>
            php_value include_path        ".:/usr/local/lib/php:/wwwfiles/sta$
    </IfModule>
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/certs/cert.crt
    SSLCertificateKeyFile /etc/apache2/ssl/private/fileblimp.com.key
    SSLCertificateChainFile /etc/apache2/ssl/certs/gd_bundle.crt
</VirtualHost>

开发服务器

<VirtualHost *:443>
    ServerName development.fileblimp.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/dev/www/files
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <IfModule pagespeed_module>
            ModPagespeed Off
    </IfModule>
    <IfModule mod_php5.c>
            php_value include_path        ".:/usr/local/lib/php:/wwwfiles/sta$
    </IfModule>
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/certs/cert.crt
    SSLCertificateKeyFile /etc/apache2/ssl/private/fileblimp.com.key
    SSLCertificateChainFile /etc/apache2/ssl/certs/gd_bundle.crt
</VirtualHost>

提前感谢您的帮助,我非常感激。

答案1

Safado 正确地指出,实时服务器上的应用程序似乎存在配置错误,这导致它将用户从 HTTPS 跳转回 HTTP。如果应用程序http://www.fileblimp.com配置中某处有一个 HTTP URL(如),我不会感到惊讶。如果你修复了它,你可能会解决你的问题。

否则,在实时服务器上,第一个虚拟主机从 HTTP 重定向回 HTTPS 似乎可以解决问题。但该虚拟主机似乎不存在于开发服务器上。这是故意的,还是你错误地将其从问题中遗漏了?这就是从 HTTP 重定向到 HTTPS 的地方,因此似乎如果你将其添加到开发服务器,解决方法也会在那里起作用。

顺便说一句,在实时服务器上,您可以通过省略来简化第一个虚拟主机RewriteCond %{SERVER_PORT} !^443$。这是不必要的,因为已知服务器<VirtualHost *:80>正在监听端口 80。

在开发中,相应的虚拟主机可以进一步简化为

<VirtualHost *:80>
    ServerName development.fileblimp.com
    Redirect permanent / https://development.fileblimp.com/
</VirtualHost>

相关内容