Рейтинг:0

Apache, обслуживающий HTTP вместо HTTPS

флаг tr

Недавно я обновился с Apache 2.2 до 2.4 (знаю, я медленно обновляюсь, не ненавидьте меня). У меня есть следующий виртуальный хост:

<VirtualHost _default_:30000>
    DocumentRoot /opt/phpmyadmin
    ErrorLog ${APACHE_LOG_DIR}/error.log

    <Directory /opt/phpmyadmin>
        Options -Indexes +IncludesNOEXEC +FollowSymLinks
        Require all granted
    </Directory>
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    LogLevel warn
</VirtualHost>

Раньше это работало с использованием Разрешить от всех синтаксис, и HTTPS отлично работает для других виртуальных хостов на порту 443. Однако, когда я перехожу к https://локальный: 30000, он обслуживает HTTP-контент вместо HTTPS. Это также единственный виртуальный хост, который использует порт 30000, поэтому я предполагаю, что это не может быть связано с конфликтами с другими виртуальными хостами, имеющими приоритет.

HTTPS-запрос:

$ curl -v https://localhost:30000
* Перестроенный URL-адрес: https://localhost:30000/
* Имя хоста НЕ было найдено в кеше DNS
* Попытка ::1...
* Подключен к локальному хосту (::1) порт 30000 (#0)
* успешно установить места проверки сертификата:
* CA-файл: нет
  CApath: /etc/ssl/certs
* SSLv3, рукопожатие TLS, приветствие клиента (1):
* ошибка: 140770FC: подпрограммы SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол
* Закрытие соединения 0
curl: (35) ошибка: 140770FC: процедуры SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол

Затем в журнале доступа Apache появляется следующее:

127.0.0.1:80 XXX.XXX.XXX.149 - - [04/окт/2021:13:14:37 -0400] "\x16\x03\x01\x02" 400 0 "-" "-"

HTTP-запрос

$ curl -v http://localhost:30000
* URL перестроен на: http://localhost:30000/
* Имя хоста НЕ было найдено в кеше DNS
* Попытка ::1...
* Подключен к локальному хосту (::1) порт 30000 (#0)
> ПОЛУЧИТЬ/HTTP/1.1
> Агент пользователя: curl/7.38.0
> Хост: локальный: 30000
> Принять: */*
> 
< HTTP/1.1 200 ОК
< Дата: понедельник, 04 октября 2021 г., 16:47:46 по Гринвичу
* Сервер Apache не занесен в черный список
< Сервер: Апач
< Варьировать: Accept-Encoding
< Длина контента: 481
< Тип содержимого: текст/html; набор символов = UTF-8
< 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <голова>
  <title>Индекс /</title>
 </голова>
 <тело>
<h1>Индекс /</h1>
  <таблица>
   <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O= D">Название</a></th><th><a href="?C=M;O=A">Последнее изменение</a></th><th><a href="?C =S;O=A">Размер</a></th><th><a href="?C=D;O=A">Описание</a></th></tr>
   <tr><th colspan="5"><hr></th></tr>
   <tr><th colspan="5"><hr></th></tr>
</таблица>
</тело></html>

Редактировать:

Я только что заметил одну вещь. У меня есть -Индексы установлен, но возвращаемый HTTP-контент является индексом каталога. Поэтому я думаю, что, возможно, каким-то образом используется другой виртуальный хост. Я до сих пор не знаю, как это возможно, поскольку это единственный порт, использующий порт 30000.

Steffen Ullrich avatar
флаг se
Пожалуйста, проверьте журнал ошибок сервера на наличие каких-либо подсказок. Кроме того, попробуйте полностью отключить этот VirtualHost и посмотреть, что произойдет — соединение должно полностью завершиться, если только на этом порту не работает что-то еще.
флаг tr
@SteffenUllrich В журнале ошибок нет ничего важного.
Steffen Ullrich avatar
флаг se
Кроме того, `SSLCertificateChainFile` устарел с 2.4
Steffen Ullrich avatar
флаг se
*"В журнале ошибок нет ничего релевантного".* - Может быть, вы считаете информацию журнала неактуальной, даже если это не так? Пожалуйста, изолируйте конкретную конфигурацию, чтобы порт 30000 был единственным в конфигурации. Тогда все, что отображается в файлах журнала, должно быть актуальным. Кроме того, это единственный файл журнала ошибок для всего Apache? Возможно, вам нужно заглянуть и в другие журналы.
флаг tr
@SteffenUllrich Единственное, что было в журнале ошибок, это сообщения о перезапуске сервера. И нет, это не единственный файл журнала ошибок. Почти все виртуальные хосты имеют свой собственный файл журнала. Во всяком случае, я разобрался со своей проблемой. Ответ опубликован.
Рейтинг:2
флаг tr

Хорошо, я понял свою проблему. Я раньше использовал /etc/apache2/sites-enabled/домен, но мне нужно было изменить его на /etc/apache2/sites-enabled/domain.conf.

Steffen Ullrich avatar
флаг se
Это объяснение для меня странно, по крайней мере, учитывая то, что вы написали в вопросе. Если конфигурация для этого VirtualHost вообще не загружена, то на порту 30000 вообще ничего не должно отвечать, учитывая, что вы утверждали, что это единственный VirtualHost, использующий этот порт.
флаг tr
У меня есть `Listen 30000` в `ports.conf`, поэтому я предполагаю, что должен быть виртуальный хост по умолчанию, который прослушивает все порты, фактически не указывая их по отдельности. Выполнение `grep -HR 30000 /etc/apache2/` возвращает только файл `ports.conf` и единственный виртуальный хост, который я настроил на этом порту.
Steffen Ullrich avatar
флаг se
Да, я забыл, что с Apache нужно предварительно объявить используемые порты.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.