我正在与一个小团队合作,我们目前有两台服务器,一台用于发布版本,另一台用于开发。我们有一个通配符 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>