Ошибка «You’re speaking plain HTTP to an SSL-enabled server port» (РЕШЕНО)

При настройке веб-сервера Apache можно столкнуться с ошибкой:

Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

Она переводится так: «Плохой запрос. Ваш браузер отправил запрос, который этот сервер не может понять. Причина: вы обращаетесь на обычном HTTP к порту сервера, на котором включён SSL. Вместо этого используйте HTTPS схему, для доступа к этому URL».

Такая проблема может возникнуть после Перехода Apache на HTTPS. Причём у неё может быть как очевидная причина, например, вы пытаетесь открыть адрес вида: http://localhost:443. В этом случае понятно — вы обращаетесь к порту 443, но используете протокол HTTP, в то время, как веб-сервер на этом порту ожидает HTTPS и ваш HTTP он не понимает.

Но эта же самая ошибка может возникнуть и при обращении по обычному адресу http://localhost. В этом случае нужно искать проблему в неправильной конфигурации.

Пример такой неправильной конфигурации, включение SSLEngine:

SSLEngine on

в контексте всего сервера, а не определённого виртуального хоста.

Если использовать SSLEngine on в главном конфигурационном файле и не поместить в контейнер VirtualHost, то будет включено HTTPS для всего сервера, для всех портов, в том числе и для 80 порта.

Поэтому решение очевидно, нужно убрать SSLEngine on из главного конфигурационного файла и поместить настройки виртуального хоста.

Пример корректной настройки:

LoadModule ssl_module modules/mod_ssl.so

Listen 443
<VirtualHost _default_:443>
    DocumentRoot "c:/Server/data/htdocs/"
    ServerName localhost:443
    ServerAdmin admin@example.com
    ErrorLog "${SRVROOT}/logs/error-ssl.log"
    TransferLog "${SRVROOT}/logs/access-ssl.log"

    SSLEngine on

    SSLCertificateFile "C:\Server\certs\localhost.crt"
    SSLCertificateKeyFile "C:\Server\certs\localhost.key"
</VirtualHost>

Перезапустите веб-сервер, чтобы изменения вступили в силу. После этого проблема должна исчезнуть — при обращении к 443 порту будет задействован HTTPS протокол, а при обращении к 80 порту будет корректно задействован протокол HTTP.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *