Настройка Apache для Laravel: от локальной среды до продакшена
Правильная конфигурация веб-сервера — критический шаг при развёртывании любого Laravel-приложения. В отличие от встроенного сервера php artisan serve, веб-сервер, такой как Apache, требует точной настройки для корректной работы маршрутизации, обработки статических файлов и обеспечения безопасности. В этом руководстве я систематизирую процесс настройки Apache для Laravel. Вы получите единый подход, который работает от локальной машины до продакшена.
Как Laravel работает с Apache
Эффективная настройка начинается с понимания архитектуры. Laravel построен по модели фронт-контроллера: все HTTP-запросы должны изначально попадать в единственную точку входа — файл public/index.php. Этот файл инициализирует фреймворк, который уже далее определяет логику обработки через маршруты и контроллеры.
Отсюда вытекает главное правило конфигурации Apache: корневая директория документа (DocumentRoot) всегда должна указывать на подкаталог public/ внутри проекта, а не на его корень. Это критически важно для безопасности, так как предотвращает прямой доступ к конфигурационным файлам (например, .env), логикам приложения и другим служебным директориям, расположенным на уровень выше.
Стандартный файл public/.htaccess в Laravel содержит набор инструкций для mod_rewrite, которые перенаправляют все запросы, не ведущие к реально существующему файлу или папке, на index.php. Этот файл — лишь отправная точка для тонкой настройки Apache. С помощью .htaccess можно решать множество других задач: повышать безопасность, управлять кешированием, настраивать редиректы и кастомизировать страницы ошибок. Подробный сборник практических примеров и готовых решений для .htaccess поможет глубже настроить ваше приложение.
Для реализации этого правила Laravel использует два взаимосвязанных механизма Apache:
- Модуль
mod_rewrite. Это движок перенаправления, который позволяет динамически переписывать URL-адреса. Он должен быть глобально активирован на сервере. - Файл
.htaccess. Содержит конкретные правила перенаправления для директории, в которой находится.
Работа этой связки — основа корректной работы маршрутизации Laravel. Без активированного mod_rewrite или с запретом на чтение .htaccess все маршруты, кроме корневого, будут возвращать ошибку 404.
Настройка локальной среды разработки
Настройка локального Apache — наиболее безопасный и рекомендуемый способ начать работу. Она позволяет получить рабочее окружение, полностью соответствующее будущему продакшен-серверу, но на личной машине.
Подготовка Apache
Перед созданием виртуального хоста необходимо проверить две глобальные настройки локального сервера Apache.
Активация модуля
mod_rewrite.На Debian, Ubuntu и их производных используется команда:
sudo a2enmod rewrite
sudo a2enmod env # Важно для передачи переменных окружения в LaravelНа системах, основанных на RHEL (CentOS, Fedora), модуль
mod-rewriteобычно уже включён. Если нет, его необходимо добавить в основной конфигурационный файл (/etc/httpd/conf/httpd.confили/etc/httpd/conf.modules.d/*.conf).После активации модуля сервер Apache необходимо перезагрузить:
sudo systemctl reload apache2(Debian/Ubuntu) илиsudo systemctl reload httpd(RHEL).
Разрешение использования
.htaccess.Требуется указать Apache учитывать правила в файлах
.htaccessдля директории с проектом. Для этого в основном конфигурационном файле Apache (например,/etc/apache2/apache2.confили/etc/httpd/conf/httpd.conf) нужно найти или добавить блок<Directory>, указывающий на путь к проекту Laravel, и установить для него директивуAllowOverride All.<Directory /путь/к/вашему/laravel-проекту/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>После внесения изменений конфигурацию сервера также необходимо перезагрузить.
Создание виртуального хоста
Использование домена вида myapp.test вместо localhost/project/public значительно упрощает разработку.
Создание конфигурационного файла виртуального хоста.
В системах Debian/Ubuntu новый файл создаётся в директории
/etc/apache2/sites-available/, например,myapp.test.conf. В него помещается следующая минимальная конфигурация:<VirtualHost *:80>
ServerName myapp.test
DocumentRoot /путь/к/вашему/laravel-проекту/public
<Directory /путь/к/вашему/laravel-проекту/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
</VirtualHost>Активация сайта и обновление hosts-файла.
На Debian/Ubuntu сайт активируется командой
sudo a2ensite myapp.test.confс последующей перезагрузкой Apache.Чтобы домен
myapp.testуказывал на локальную машину, необходимо добавить запись в системный файлhosts:127.0.0.1 myapp.test- Linux/macOS:
/etc/hosts - Windows:
C:\Windows\System32\drivers\etc\hosts
- Linux/macOS:
После перезагрузки Apache и браузера приложение должно стать доступно по адресу
http://myapp.test. Чтобы организовать полностью валидное HTTPS-соединение в локальной среде (с «зелёным замочком» в браузере) без предупреждений безопасности, используйте инструментmkcert. Подробное руководство по его настройке поможет сделать это за несколько минут.Проверка и отладка типовых проблем
Если приложение не загружается или маршруты не работают, стоит проверить следующее:
- Синтаксис конфигурационных файлов Apache. Проверить можно командой
sudo apache2ctl configtestилиsudo httpd -t. - Права доступа к файлам. Веб-сервер (пользователь
www-dataилиapache) должен иметь право на чтение всех файлов в директории проекта. - Кэш конфигурации Laravel. После изменения путей может потребоваться очистка кэша:
php artisan config:cache. - Логи ошибок. Основной источник информации при отладке — файлы логов Apache (
/var/log/apache2/или/var/log/httpd/) и Laravel (storage/logs/laravel.log).
- Синтаксис конфигурационных файлов Apache. Проверить можно командой
Перенос проекта на рабочий сервер
Конфигурация для продакшена строится на той же основе, что и локальная, но с добавлением обязательных шагов по обеспечению безопасности, производительности и отказоустойчивости.
Базовая конфигурация: повторение успешной схемы
Алгоритм действий на сервере (VPS или выделенном) повторяет шаги из локальной настройки, но с учётом серверного окружения.
- Подготовка сервера. Устанавливаются необходимые пакеты: Apache, PHP с требуемыми расширениями (включая
php-fpmдля часто используемой связки Apache + PHP-FPM), Composer. - Настройка базовых модулей Apache. Активируются модули
mod_rewrite,mod_ssl(для HTTPS), а такжеmod_proxy_fcgiиmod_setenvif, если используется PHP-FPM. Команды аналогичны локальным, но могут отличаться в зависимости от дистрибутива сервера (Debian/Ubuntu, CentOS/RHEL). - Размещение кода приложения. Код проекта размещается в директории, отличной от системной корневой веб-директории, например,
/var/www/laravel-app/. Права доступа налагаются строго: владелец — пользователь для развёртывания (например,deploy), группа — веб-сервер (например,www-data). - Создание виртуального хоста для HTTP. Создаётся файл конфигурации (например,
/etc/apache2/sites-available/laravel-app.conf), структурно идентичный локальному, но с актуальными путями и доменным именем. После активации сайта и перезагрузки Apache приложение должно стать доступно по HTTP. Активируйте его командойsudo a2ensite laravel-app.confи перезагрузите Apache (sudo systemctl reload apache2).
Принудительное использование HTTPS
Работа приложения по незашифрованному HTTP в продакшене неприемлема. Настройка HTTPS состоит из двух ключевых частей.
Настройка виртуального хоста для HTTPS. Создаётся конфигурация для порта
443, аналогичная HTTP-хосту, но с добавлением директив для SSL.<VirtualHost *:443>
ServerName your-domain.com
# ... DocumentRoot и Directory (как в HTTP1-конфиге) ...
SSLEngine on
SSLCertificateFile /etc/ssl/certs/your-domain.crt
SSLCertificateKeyFile /etc/ssl/private/your-domain.key
# Для лучшей безопасности рекомендуется также указать цепочку сертификатов (SSLCertificateChainFile)
# Дополнительные настройки безопасности (протоколы, шифры)
# Современные безопасные настройки с приоритетом Forward Secrecy
SSLProtocol TLSv1.2 TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off # Отключает TLS session tickets для предотвращения атак на возобновление сессий. Может вызвать проблемы с балансировщиками нагрузки или некоторыми клиентами.
# Для совместимости со старыми клиентами можно использовать:
# SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384
ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
</VirtualHost>Настройка редиректа всего HTTP-трафика на HTTPS. Это критически важный шаг для безопасности. В конфигурации виртуального хоста для порта 80 (HTTP) добавляются правила перенаправления.
<VirtualHost *:80>
ServerName your-domain.com
# Редирект всех запросов на HTTPS-версию
Redirect permanent / https://your-domain.com/
</VirtualHost>
Использование TLS 1.3 значительно повышает безопасность и скорость установки соединения. Подробное руководство по его активации в Apache для различных дистрибутивов доступно в отдельной статье.
Финальный чек-лист перед запуском
Перед открытием доступа к приложению необходимо проверить:
Права доступа к системным директориям Laravel. Веб-сервер должен иметь права на запись в
storage/иbootstrap/cache/. Рекомендуемые команды:# Установите владельца и группу (замените 'www-data' на пользователя вашего веб-сервера)
sudo chown -R www-data:www-data storage bootstrap/cache
# Установите корректные права (владелец и группа - чтение/запись/выполнение, остальные - только чтение/выполнение)
sudo chmod -R 775 storage bootstrap/cache
# Альтернативный, более безопасный вариант:
sudo chmod -R ug+rwx,o+rx storage bootstrap/cacheКорректность настроек в файле
.env. Ключевые параметры:APP_URL(должен начинаться сhttps://), настройки базы данных, драйвера кэша (redis/memcachedдля продакшена).Оптимизация производительности выполнена. Запущены команды:
php artisan config:cache,php artisan route:cache,php artisan view:cache.Проверка безопасности маршрутов. Убедиться, что все продакшен-маршруты защищены (например,
authmiddleware для панели администратора).Настройка логирования и мониторинга. Проверены пути к логам Apache и Laravel, рассмотрена настройка внешнего мониторинга (например, Sentry).
Тестирование отказоустойчивости. Проверена работа приложения при отключении сервисов (база данных, кэш), протестирован процесс деплоя без даунтайма.
После прохождения чек-листа и окончательного тестирования приложение готово к работе в продакшен-режиме.
Решение сложных задач развёртывания
На практике часто возникают сценарии, выходящие за рамки базовой настройки «один домен — одно приложение». Конфигурация Apache гибка и позволяет решать эти задачи без изменения кода Laravel.
Размещение нескольких приложений на одном сервере
Экономически эффективный подход, когда несколько независимых проектов работают на одном физическом или виртуальном сервере. Реализуется через создание отдельных виртуальных хостов для каждого домена или субдомена.
Пример конфигурации для двух приложений в одном файле (/etc/apache2/sites-available/multiple-apps.conf):
# Первое приложение: CRM
<VirtualHost *:80>
ServerName crm.example.com
DocumentRoot /var/www/crm.example.com/public
<Directory /var/www/crm.example.com/public>
AllowOverride All
Require all granted
</Directory>
# Директивы для логирования (ErrorLog, CustomLog) для каждого приложения свои
</VirtualHost>
# Второе приложение: Интернет-магазин
<VirtualHost *:80>
ServerName shop.example.com
DocumentRoot /var/www/shop.example.com/public
<Directory /var/www/shop.example.com/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>Важные моменты:
- Изоляция: Каждое приложение имеет собственные корневую директорию, логи и настройки. Проблемы в одном проекте не затрагивают другие.
- Масштабирование: При необходимости ресурсоёмкое приложение можно легко перенести на отдельный сервер, изменив только DNS-запись домена.
- Общий SSL: Для HTTPS можно использовать один wildcard-сертификат для
*.example.comили отдельные сертификаты для каждого домена.
Интеграция Laravel в поддиректорию существующего сайта
Ситуация, когда Laravel-приложение (например, блог или панель управления) должно работать не на отдельном домене, а как часть основного сайта по пути вроде example.com/admin или example.com/blog.
Оптимальное решение — использование директивы Alias в виртуальном хосте основного сайта:
<VirtualHost *:80>
ServerName example.com
# Корневая директория основного сайта (может быть статичным HTML или другим приложением)
DocumentRoot /var/www/main-site/public
# Сопоставление пути "/app" с публичной директорией Laravel
Alias /app "/var/www/laravel-app/public"
<Directory "/var/www/laravel-app/public">
AllowOverride All
Require all granted
# Важно: отключаем проверку директорий для алиаса, если требуется
Options FollowSymLinks
</Directory>
</VirtualHost>Важное замечание для Laravel: При работе в поддиректории необходимо убедиться, что помощники маршрутизации (route(), asset()) генерируют корректные URL. За это отвечает параметр APP_URL в файле .env. Для приведённого примера он должен быть установлен как APP_URL=https://example.com/app.
Запуск на виртуальном хостинге с доступом только к .htaccess
Многие виртуальные (shared) хостинги не предоставляют доступ к конфигурации виртуальных хостов. Единственный инструмент управления — файл .htaccess в корневой директории (public_html/ или www/). В этом случае Laravel можно установить в поддиректорию (например, public_html/laravel/), а с помощью правил в корневом .htaccess — перенаправить все запросы в его публичную папку.
Пример содержимого .htaccess в корне public_html/:
RewriteEngine On
# Перенаправляем все запросы в папку laravel/public/, если они ещё не находятся там
RewriteCond %{REQUEST_URI} !^/laravel/public/
RewriteRule ^(.*)$ laravel/public/$1 [L]Альтернативный вариант с проверкой существования файлов:
# Если запрос не ведёт к существующему файлу или папке в корне,
# перенаправляем его в папку laravel/public/
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel/public/$1 [L]Схема работы:
- Пользователь запрашивает
https://example.com/login. - Файл
.htaccessвpublic_html/перенаправляет запрос во внутренний путьlaravel/public/login(обратите внимание на отсутствие начального слеша — это важно для относительных путей). - Внутренний файл
laravel/public/.htaccess(стандартный для Laravel) передаёт запросloginвindex.phpдля обработки маршрутизацией.
Особенности и ограничения:
- Производительность: Использование
.htaccessменее эффективно, чем глобальная конфигурация в<Directory>, так как файл читается при каждом запросе. - Конфигурация Laravel: Параметр
APP_URLдолжен быть установлен точно в соответствии с основным доменом (APP_URL=https://example.com). Хелперasset()будет работать корректно, так как запросы к статическим файлам (/css/app.css) по правилу №1 будут напрямую обслуживаться изlaravel/public/.
Часто задаваемые вопросы (FAQ)
Вопросы по настройке и ошибкам
После настройки виртуального хоста получаю ошибку 403 Forbidden. Что делать?
Ошибка 403 обычно связана с правами доступа или настройками директории. Проверьте:
Права доступа: Убедитесь, что веб-сервер (пользователь
www-dataилиapache) имеет права на чтение всех файлов в директории проекта, особенно в папкеpublic/.Настройки
<Directory>: В конфигурации виртуального хоста убедитесь, что для директорииpublic/установлены директивы:Require all granted
Options FollowSymLinksВладелец файлов: Файлы не должны принадлежать пользователю
root. Исправьте командой:sudo chown -R www-data:www-data /путь/к/проекту
Маршруты Laravel возвращают ошибку 404, но главная страница работает. В чем проблема?
Эта проблема почти всегда связана с модулем mod_rewrite. Решение:
Активируйте модуль:
sudo a2enmod rewrite
sudo systemctl reload apache2Проверьте настройки
.htaccess: Убедитесь, что в папкеpublic/существует файл.htaccessсо стандартным содержимым Laravel.Разрешите
.htaccess: В конфигурации Apache для директории проекта должно быть:AllowOverride All
После настройки HTTPS сайт выдаёт ошибку «Ваше соединение не защищено». Что не так?
Проблема с SSL-сертификатом. Проверьте:
Пути к сертификатам в конфигурации Apache:
/etc/ssl/certs/ваш-домен.crtи/etc/ssl/private/ваш-домен.keyПрава доступа к приватному ключу (только для чтения владельцем):
sudo chmod 600 /etc/ssl/private/ваш-домен.keyЦепочку сертификатов: Для некоторых провайдеров нужен промежуточный сертификат. Добавьте директиву:
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
Статические файлы (CSS, JS, изображения) не загружаются. Как исправить?
Проблема с путями к статическим файлам. Решения:
Для продакшена: Убедитесь, что в .env установлен корректный
APP_URL(сhttps://для HTTPS).Сгенерируйте правильные ссылки: Очистите кэш и перегенерируйте ссылки:
php artisan config:clear
php artisan view:clearПроверьте симлинки: Если используете
storage:link, проверьте, что симлинк создан:php artisan storage:link
Как проверить, активен ли модуль mod_rewrite?
Есть несколько способов:
Через командную строку:
apache2ctl -M | grep rewrite # Debian/Ubuntu
httpd -M | grep rewrite # RHEL/CentOSСоздайте PHP-файл в корне сайта с содержимым
<?php phpinfo(); ?>и найдите раздел «Loaded Modules».Проверьте наличие файла: На Debian/Ubuntu модуль обычно находится в
/etc/apache2/mods-enabled/rewrite.load.
Сессии Laravel не сохраняются или сбрасываются после перезагрузки страницы
Проблема с правами доступа к папке storage/. Решение:
Установите правильные права:
sudo chown -R www-data:www-data storage/
sudo chmod -R 775 storage/Проверьте драйвер сессий в
.env: для продакшена лучше использоватьredisилиmemcachedвместоfile— это важно для масштабирования и производительности.Очистите кэш приложения:
php artisan cache:clear
Вопросы по производительности и оптимизации
Использование .htaccess замедляет сайт. Есть ли альтернатива?
Да, для повышения производительности можно перенести правила из .htaccess в основную конфигурацию Apache (<Directory> блок в виртуальном хосте):
<Directory /путь/к/public>
# Вместо AllowOverride All и .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</Directory>Это избавит Apache от необходимости читать .htaccess при каждом запросе.
Как настроить кэширование статических файлов (CSS, JS, изображений) в Apache?
Добавьте в конфигурацию виртуального хоста:
<IfModule mod_expires.c>
ExpiresActive On
# Кэширование на 1 год
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
</IfModule>Не забудьте активировать модуль: sudo a2enmod expires.
Вопросы по конкретным сценариям
Нужно ли настраивать что-то в Laravel при переносе с локального сервера на продакшен?
Да, несколько важных изменений:
Файл
.env:- Установите
APP_ENV=production - Убедитесь, что
APP_DEBUG=false - Проверьте
APP_URL(должен начинаться сhttps://)
- Установите
Настройки кэша: В продакшене всегда используйте:
php artisan config:cache
php artisan route:cache
php artisan view:cacheОптимизация Composer:
composer install --optimize-autoloader --no-devПодробнее прочитать об управлении можно в статье Composer: практическое руководство по управлению зависимостями PHP
Как обслуживать несколько Laravel-приложений на одном IP с разными портами?
Создайте виртуальные хосты с разными портами:
# Приложение 1 на порту 8080
<VirtualHost *:8080>
ServerName app1.local
DocumentRoot /var/www/app1/public
# ... остальные настройки
</VirtualHost>
# Приложение 2 на порту 8081
<VirtualHost *:8081>
ServerName app2.local
DocumentRoot /var/www/app2/public
# ... остальные настройки
</VirtualHost>Добавьте в /etc/apache2/ports.conf:
Listen 8080
Listen 8081Можно ли использовать Apache вместе с Nginx/Angie для Laravel?
Да, популярная конфигурация — Nginx как обратный прокси перед Apache:
- Nginx/Angie обрабатывает статические файлы и SSL
- Apache (через
php-fpm) обрабатывает PHP-запросы Laravel
Преимущества: Лучшая производительность для статических файлов и более гибкая настройка кэширования в Nginx.
Laravel выдаёт ошибку «No input file specified». В чем причина?
Эта ошибка возникает, когда PHP не может найти index.php. Причины и решения:
- Неправильный
DocumentRoot: Убедитесь, что он указывает на папкуpublic/. - Проблемы с путями в
php.ini: Проверьте директивыdoc_rootиuser_dir. - Ошибка в правилах
mod_rewrite: Временно отключите.htaccess, чтобы проверить, работает ли сайт без него.
Вопросы по безопасности
Какие минимальные настройки безопасности Apache для Laravel?
Рекомендуемые настройки:
Скрыть информацию о сервере:
ServerTokens Prod
ServerSignature OffЗапретить доступ к dot-файлам (
.env,.htaccess,.gitи т.д.):<FilesMatch "^\.">
Require all denied
</FilesMatch>
Как настроить HTTP/2 в Apache для Laravel?
После настройки HTTPS:
Активируйте модуль:
sudo a2enmod http2Добавьте в виртуальный хост HTTPS:
Protocols h2 http/1.1Проверьте поддержку: Убедитесь, что используемая версия Apache ≥ 2.4.17 и OpenSSL ≥ 1.0.2.
Если ваш вопрос не найден здесь, проверьте логи ошибок:
# Логи Apache
tail -f /var/log/apache2/error.log
# Логи Laravel
tail -f storage/logs/laravel.logЧаще всего именно в логах содержится точная информация о проблеме.
Заключение
Настройка Apache для работы с Laravel — это системный процесс, основанный на понимании единого принципа: корневая директория документа (DocumentRoot) всегда должна указывать на подкаталог public/ проекта. Этот принцип универсален и применим к любой среде: от локальной машины разработчика до промышленного кластера.
Несмотря на различия в деталях (наличие доступа к конфигурации виртуальных хостов, необходимость SSL, работа в поддиректории), последовательность действий остаётся логичной и предсказуемой: активация mod_rewrite, разрешение .htaccess, корректное указание путей, настройка HTTPS и проверка прав доступа.
Для быстрого обращения ключевые шаги по средам сведены в таблицу:
| Среда / Задача | Ключевой инструмент | Критически важная настройка | Что проверить |
|---|---|---|---|
| Локальная разработка | Виртуальный хост | DocumentRoot /путь/проекта/public | Запись в файле hosts, права на storage/ |
| Рабочий сервер (VPS) | Виртуальный хост + SSL | Редирект HTTP → HTTPS в хосте *:80 | Значение APP_URL (с https://), кэш конфигурации. Настройки брандмауэра (открыты ли порты 80/443) |
| Несколько приложений | Несколько виртуальных хостов | Уникальный ServerName для каждого | Изоляция путей и логов для каждого проекта |
| Работа в поддиректории | Директива Alias | Alias /app "/путь/к/public" | APP_URL (например, https://site.com/app) |
| Виртуальный хостинг | Корневой .htaccess | Правило перенаправления в .htaccess (см. пример выше) | Отсутствие конфликтов с другими правилами в .htaccess |
Следуя этой схеме и уделяя внимание деталям, описанным в руководстве, можно добиться стабильной и безопасной работы Laravel-приложения на сервере Apache в любой требуемой конфигурации.
Полезные ресурсы
- Официальная документация Laravel по развёртыванию
- Документация Apache: модуль
mod_rewrite - Документация Apache: виртуальные хосты
- Mozilla SSL Configuration Generator — инструмент для генерации безопасных настроек SSL
- Проверка безопасности SSL — онлайн-сервис для проверки настроек SSL