Задача: на одном сервере у нас поднят apache2 с поддержкой ssl. Проект работает через ssl, так что запросы на обычный http 80й порт перенаправляем на https (обычным javascript или через header). Причем на одном сервере поднята среда для тестирования проекта и среда для демонстрации. Т.е. надо обработать запросы по name1.server.com:443, name1.server.com:80, name2.server.com:443, name2.server.com:80 и для каждого из них прописать свою DocumentRoot (папку где лежат файлы).
Часа два боролся с конфигом /etc/apache2/sites-available. В итоге вот что получаем:
- создаем в /etc/apache2/sites-available файл ssl-sites и файл nossl-sites
- в nossl-sites пишем что-то похожее на:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/hosting/name1.server.com/nossl/
<Directory /var/hosting/name1.server.com/nossl/>
Options None
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/hosting/name1.server.com/log/error.log
LogLevel debug
CustomLog /var/hosting/name1.server.com/log/access.log combined
ServerSignature On
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/hosting/name2.server.com/nossl/
ServerName name2.server.com
<Directory /var/hosting/name2.server.com/nossl/>
Options None
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/hosting/name2.server.com/log/error.log
LogLevel debug
CustomLog /var/hosting/name2.server.com/log/access.log combined
ServerSignature On
</VirtualHost> - В файле ssl-sites пишем что-то вроде:
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /var/hosting/name1.server.com/ssl/sslkey.crt
SSLCertificateKeyFile /var/hosting/name1.server.com/ssl/sslkey.key
SSLCACertificateFile /var/hosting/name1.server.com/ssl/sslkey-ca.crt
DocumentRoot /var/hosting/name1.server.com/www
<Directory /var/hosting/name1.server.com/www/>
Options None
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/hosting/name1.server.com/log/error.log
LogLevel warn
CustomLog /var/hosting/name1.server.com/log/access.log combined
ServerSignature On
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /var/hosting/name2.server.com/ssl/sslkey.crt
SSLCertificateKeyFile /var/hosting/name2.server.com/ssl/sslkey.key
SSLCACertificateFile /var/hosting/name2.server.com/ssl/sslkey-ca.crt
ServerName name2.server.com
DocumentRoot /var/hosting/name2.server.com/www
<Directory /var/hosting/name2.server.com/www/>
Options None
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/hosting/name2.server.com/log/error.log
LogLevel warn
CustomLog /var/hosting/name2.server.com/log/access.log combined
ServerSignature On
</VirtualHost> - Для name1.server.com ServerName мы не указываем, это значит, что по запросу name3.server.com будет открываться та же папка, что и у name1.server.com
- Пишем в консоли (создаем ссылки в папку /etc/apache2/sites-enabled)
a2ensite ssl-sites
a2ensite nossl-sites - Перегружаем конфиг апача
/etc/init.d/apache2 reload
- В /var/hosting/name1.server.com/nossl/ и /var/hosting/name2.server.com/nossl/ создаем файлы index.php такого содержания (для редиректа на https):
<? header("Location: https://$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]"); ?>