Я работаю с небольшой командой, и в настоящее время у нас есть два сервера: один для сборок выпуска, а другой - для разработки. У нас есть подстановочный 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>
Заранее спасибо за помощь, я очень признателен.
Safado правильно указывает, что в приложении на активном сервере, похоже, есть ошибка конфигурации, из-за которой пользователи возвращаются с HTTPS обратно на HTTP. Я не удивлюсь, если есть HTTP-URL, например http://www.fileblimp.com
, где-то в конфигурации приложения. Если вы это исправите, вы, вероятно, решите свою проблему.
В противном случае на реальном сервере перенаправление на первом виртуальном хосте с HTTP обратно на HTTPS, похоже, помогает обойти проблему. Но похоже, что этого виртуального хоста нет на сервере разработки. Это сделано намеренно или вы по ошибке не упомянули об этом? Вот где происходит перенаправление с HTTP на HTTPS, поэтому может показаться, что если вы добавите его на сервер разработки, обходной путь будет работать и там.
Кстати, на живом сервере вы можете немного упростить первый виртуальный хост, исключив RewriteCond %{SERVER_PORT} !^443$
. В этом нет необходимости, поскольку сервер в <VirtualHost *:80>
известно, что он прослушивает порт 80.
В процессе разработки соответствующий виртуальный хост может еще больше упроститься до
<VirtualHost *:80>
ServerName development.fileblimp.com
Redirect permanent / https://development.fileblimp.com/
</VirtualHost>