400 Bad Request The plain HTTP request was sent to HTTPS port

Maxim Dounin mdounin на mdounin.ru
Вт Июл 5 23:04:11 UTC 2022


Hello!

On Tue, Jul 05, 2022 at 03:40:47PM -0400, milov wrote:

> В общем решил проблему. 
> 
> У меня на одном айпи висит несколько сайтов и в конфигах nginx прописано у
> двух сайтов default_server, оставил только у одного и проблема решилась.
> Возможно это баг какой-то и стоит куда-то сообщить.
> 
> Странно только почему раньше работали редиректы )

Если у одного и того же listen-сокета используется флаг 
default_server в двух разных блоках server{} - это фатальная 
ошибка, nginx с таким конфигом работать не будет.  В логах и при 
тестировании конфигурации будет ошибка вида:

2022/07/06 01:40:43 [emerg] 900#100127: a duplicate default server for 0.0.0.0:8080 in ...

Если раньше работало - возможно, nginx не перезапускали, и он 
работал со старым конфигом, до появления ошибки в конфиге.

Если же флаг default_server использовался у разных listen-сокетов, 
то убрав его у одного из listen-сокетов вы просто изменили сервер 
по умолчанию для этого listen-сокета.  Это может исправить 
проблему с "client sent plain HTTP request to HTTPS port", если 
использовалась кривая конфигурация с "ssl on;" в блоке server с 
listen-сокетами, которые не должны использовать SSL.  Директива 
"ssl" объявлена устаревшей 4 года назад, в nginx 1.15.0, причём 
именно потому, что её использование легко приводит к подобным 
ошибкам.  Если директива "ssl" действительно используется - 
конфигурацию следует переписать с использованием "listen ... ssl;" 
вместо неё.  Подробнее смотри http://nginx.org/r/ssl/ru и 
http://nginx.org/r/listen/ru.

-- 
Maxim Dounin
http://mdounin.ru/



Подробная информация о списке рассылки nginx-ru