Вопрос или проблема
Сервер: Ubuntu/Apache
Сценарий
У меня есть система, которая используется разными доменами
Я хотел бы, чтобы “основные” файлы использовались для всех доменов (чтобы упростить обслуживание)
Однако у каждого домена должны быть некоторые свои/эксклюзивные директории
Пример:
Основные файлы (все типы файлов – доступны доменами domainA, domainB и т.д.)
/var/www/corefiles
Эксклюзивные файлы для каждого домена (разрешение на чтение и запись)
/var/www/domainA
/var/www/domainB
Я думал о попытке решить это с помощью виртуальных хостов:
<VirtualHost *:80>
ServerName domainA.com
DocumentRoot /var/www/domainA
<Directory /var/www/domainA>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /corefiles /var/www/corefiles
<Directory /var/www/corefiles>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# Логи
ErrorLog ${APACHE_LOG_DIR}/domainA_error.log
CustomLog ${APACHE_LOG_DIR}/domainA_access.log combined
# SSL
SSLEngine on SSLCertificateFile /etc/ssl/certs/domainA.com.crt
SSLCertificateKeyFile /etc/ssl/private/domainA.com.key
# Временные файлы
php_admin_value session.save_path "/var/www/domainA/tmp"
</VirtualHost>
И в конфигурационном файле для каждого домена:
define('DOMAIN', 'https://domainA/');
define('APPLICATION', '/var/www/corefiles');
define('FILES', '/var/www/domainA/files');
Это возможно?
Есть ли какие-то проблемы с безопасностью?
Есть ли вопросы о SSL сертификатах, куках, временных файлах PHP и т.д.?
Есть ли другие предложения?
Спасибо
Ответ или решение
Настройка Apache для обработки "корневых" и уникальных файлов между различными доменами
Введение
В условиях современного IT важно не только эффективно управлять многими доменами, но и минимизировать затраты на поддержку и обновление файлов. В данной конфигурации на сервере под управлением Ubuntu с использованием Apache вам необходимо настроить систему так, чтобы "корневые" файлы использовались всеми доменами, в то время как каждый домен имел доступ к своим собственным уникальным файлам.
Структура каталогов
Прежде всего, рассмотрим нашу файловую структуру:
- Общие файлы для всех доменов:
/var/www/corefiles
- Эксклюзивные файлы для каждого домена:
/var/www/domainA /var/www/domainB
Настройка Apache с использованием VirtualHost
Для управления несколькими доменами Apache предоставляет функциональность VirtualHost. Чтобы реализовать вашу задачу, вы можете настроить файл конфигурации Apache для каждого домена следующим образом:
<VirtualHost *:80>
ServerName domainA.com
DocumentRoot /var/www/domainA
<Directory /var/www/domainA>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Alias /corefiles /var/www/corefiles
<Directory /var/www/corefiles>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# Журналирование
ErrorLog ${APACHE_LOG_DIR}/domainA_error.log
CustomLog ${APACHE_LOG_DIR}/domainA_access.log combined
# SSL
SSLEngine on
SSLCertificateFile /etc/ssl/certs/domainA.com.crt
SSLCertificateKeyFile /etc/ssl/private/domainA.com.key
# Временные файлы PHP
php_admin_value session.save_path "/var/www/domainA/tmp"
</VirtualHost>
Этот код конфигурирует виртуальный хост для domainA.com
, устанавливая корневую директорию и настраивая доступ к общим файлам.
Безопасность
При организации структуры и конфигурации виртуальных хостов важно следить за безопасностью:
-
Права доступа: Убедитесь, что соответствующие права доступа настроены правильно. Директории
/var/www/corefiles
и/var/www/domainA
должны быть доступны только от имени пользователя, под которым работает веб-сервер. -
Настройка SSL: Использование SSL обеспечивает шифрование данных между клиентом и сервером. Убедитесь, что сертификаты корректные и обновленные.
-
Валидация входящих данных: Если ваш код будет взаимодействовать с файлами, убедитесь, что вы проверяете все входные данные на корректность, чтобы избежать уязвимостей, таких как XSS или RFI.
Проблемы, касающиеся SSL-сертификатов, cookies и временных файлов PHP
-
SSL-сертификаты: Для каждого домена вам необходимы индивидуальные сертификаты. Не используйте общий сертификат для разных доменов, так как это может создать проблемы с безопасностью и доступностью.
-
Cookies: Убедитесь, что cookie имеют правильные флаги, такие как
Secure
иHttpOnly
, чтобы защитить их от атак. -
Временные файлы PHP: Храните временные файлы в директории, написанной выше. Это поможет в изоляции сессий для каждого домена.
Заключение
Вы полностью правы в своей мысли о том, что данная структура возможна. Контроль доступа, управление правами и использование правильной конфигурации в Apache поможет вам эффективно управлять как общими, так и уникальными файлами для различных доменов. Регулярно проверяйте свои настройки безопасности и следите за обновлениями, чтобы избежать возможных уязвимостей.
Если у вас есть дополнительные вопросы или вы нуждаетесь в особенностях, пожалуйста, дайте знать!