У меня apache2 работает на ubuntu 14.04, и я настроил SSL с помощью Let's Encrypt.
На одном из моих доменов (domainA) он работает нормально. Я могу добраться до него в
http://domainA.com
http://www.domainA.com
или
https://domainA.com
https://www.domainA.com
Однако у меня есть дополнительные домены, указывающие на поле, и я настроил виртуальные серверы для каждого из них. Я настраиваю их так же, как и domainA (см. этот урок, если вам интересно, как)
На моих дополнительных доменах трафик через https отображает правильный фиктивный контент, но трафик через http показывает мне только корневой каталог (поэтому отображается index.html по умолчанию).
в / etc / apache2 / sites-available у меня есть следующее:
000-default.conf
default-ssl.conf
domainA.com.conf
domainA.com-le-ssl.conf
domainB.com.conf
domainB.com-le-ssl.conf
Все они настроены одинаково, изменяется только соответствующая информация.
domainA .conf выглядит так:
<VirtualHost *:80>
ServerAdmin me@domainA.com
ServerName domainA.com
ServerAlias www.domainA.com
DocumentRoot /var/www/html/domainA/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
domainB.conf выглядит идентично, за исключением того, что вместо domainA подставлено «domainB». Файл domainA.com-le-ssl.conf выглядит почти идентично, за исключением того, что включает все соответствующие файлы SSL и находится на порту 443 (он генерируется динамически, когда я создаю файл с помощью Let's Encrypt - я их не трогал)
Итак, domainB.conf выглядит так:
<VirtualHost *:80
ServerAdmin me@domainB.com
ServerName domainB.com
ServerAlias www.domainB.com
DocumentRoot /var/www/html/domainB/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
DomainB.com-le-ssl.conf выглядит так (идентично DomainA с измененными только соответствующими именами):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin me@domainB.com
ServerName domainB.com
ServerAlias www.domainB.com
DocumentRoot /var/www/html/domainB/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/domainB.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domainB.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/domainB.com/chain.pem
</VirtualHost>
</IfModule>
http и https на domainA работают без проблем, оба показывают одно и то же.
http на domainB переводит меня в / var / www / html
https на domainB переводит меня в / var / www / html / domainB / public_html (как задумано)
DNS указывает на мой сервер нормально для соответствующих доменов - поэтому я не думаю, что это проблема DNS в такой степени, как проблема с конфигурациями или, может быть, с SSL?
Просто интересно, почему и / или как я могу это изменить? Есть ли у кого-нибудь идеи, почему это могло сработать с первым, но ни с одним другим?
Я чувствую, что он подбирает 000-default.conf для HTTP-трафика.
Мой 000-default.conf выглядит так:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Таким образом, очевидно, что в какой-то момент HTTP-версия сайтов была отключена (возможно, при включении HTTPS-версии).
Как только я сделал следующее, они работали как через порт 80, так и через порт 443 (http и https соответственно):
sudo a2ensite domainB.com.conf
Затем я бы перезагрузил apache следующим образом:
sudo service apache2 reload
Затем он подбирает конфигурацию для HTTP-версии сайта и направляет ее соответствующим образом.
Я решил, что хочу принудительно использовать HTTPS для всего трафика, поэтому добавил следующую строку в HTTP conf (/etc/apache2/sites-available/domainB.com.conf)
Redirect permanent / https://domainB.com
Теперь, если кто-то пытается попасть на сайт по HTTP, он направляет его в нужное место.
Надеюсь, это поможет кому-то другому :)