Вот моя попытка комбинированной конфигурации.Обратите внимание, что у меня нет вашей настройки для его тестирования, но я использовал аналогичные конфигурации на производственных серверах.
Сначала определите ваш порт 80 VirtualHost (000-default.conf в вашей настройке):
Listen 80
<VirtualHost *:80>
Redirect "/" "https://example.com/"
LogLevel debug
ErrorLog "${APACHE_LOG_DIR}/80_error.log"
CustomLog "${APACHE_LOG_DIR}/80_access.log" combined
</VirtualHost>
Нет необходимости в DocumentRoot
, поскольку вы перенаправляете все.
Затем закомментируйте default-ssl.conf
.Этот файл является примером того, что вы можете сделать, чтобы настроить виртуальный хост с поддержкой SSL.Если вы используете этот файл И еще один VirtualHost на порту 443, он всегда будет использоваться, поскольку Apache использует первый обнаруженный VirtualHost, который соответствует запросу клиента (здесь порт 443).
Другой момент, VirtualHost не являются«добавлены» друг к другу.Каждый из них не зависит от других и должен содержать полную конфигурацию.Это означает, что вы не можете поместить некоторые настройки в VirtualHost на порт 443, а некоторые - в другой и ожидать, что он будет работать.
Затем создайте файл example.com.conf
:
Listen 443
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
SSLCertificateFile "/root/example.com.crt"
SSLCertificateKeyFile "/root/example.com.key"
SSLCACertificateFile "/root/intermediate.crt"
LogLevel debug
ErrorLog "logs/443_error_log"
CustomLog "logs/443_access_log" combined
DocumentRoot "/var/www/example.com/html"
DirectoryIndex index.html
<Directory "/var/www/example.com/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Некоторые примечания:
- Я поставил
LogLevel
на отладку, чтобы вы могли устранить неполадки, но, как только он заработает, измените его на ошибку.В противном случае вы быстро получите огромные файлы журналов! - По той же причине я разделяю журналы для порта 80 и порта 443. Каждый VirtualHost должен иметь свои собственные журналы.
- Файлы сертификатов должны совпадатьдоменное имя.Не имя файла (хотя это облегчает сопоставление), а сам сертификат.
- Если вы хотите, чтобы ваш сертификат покрывал example.com и www.example.com, оба имени должны быть добавлены к альтернативным именам в сертификате.
- Я делаюне понимаю, почему у вас
Redirect permanent / https://example.com
в вашей конфигурации.Вы уже находитесь в https
, порт 443 VirtualHost. - При желании можно добавить параметры, основанные на директивах
<FilesMatch>
в конфигурации ssl по умолчанию.
Эта настройкабудет гарантировать, что все http
запросы будут перенаправлены на https://example.com
.Затем он будет использовать: 443 VirtualHost, использовать соответствующий сертификат для этого домена и обслуживать содержимое из каталога DocumentRoot.