Назад | Перейти на главную страницу

http-трафик, показывающий другой каталог, чем https-трафик на apache

У меня 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, он направляет его в нужное место.

Надеюсь, это поможет кому-то другому :)