Welcome! Log In Create A New Profile

Advanced

Re: игрорировать некорректные заголовки для upstream

Maxim Dounin
September 20, 2022 01:42PM
Hello!

On Tue, Sep 20, 2022 at 07:35:32PM +0300, Igor Savenko wrote:

> Добрый день! Странная ситуация, апстримом для nginx является лайтспид, и
> вот этот лайтспид на http2 отдает нормальные заголовки ответа, а для
> http/1.1 некорректные, например, вот это выводит curl:
> curl -s -v --http1.1 -o /dev/null https://domain.com/images/12345.png
> --resolve domain.com:443:1.2.3.4
> ...
> > GET /images/12345.png HTTP/1.1
> > Host: domain.com
> > User-Agent: curl/7.74.0
> > Accept: */*
> >
> < HTTP/1.1 200 OK
> < Connection: Keep-Alive
> < Keep-Alive: timeout=5, max=100
> expires: Thu, 20 Oct 2022 15:48:24 GMTc
> < content-type: image/png
> < last-modified: Tue, 08 Feb 2022 17:03:26 GMT
> < accept-ranges: bytes
> < content-length: 847
> < date: Tue, 20 Sep 2022 15:48:24 GMT
> < server: LiteSpeed
>
> Обратите внимание на начало заголовка expires, он не начинается с <
> символа, следовательно, или в начале этого, или в конце предыдущего
> заголовка приезжает некорректный символ. Насколько я знаю, nginx не
> поддерживает http/2 для общения с апстримом. Отсюда вопрос. Есть дешевый
> способ заставить nginx игнорировать некорректные произвольные заголовки
> (полностью заголовок, а не только название) от апстрима, а не только
> заранее определенные, как в директиве proxy_ignore_headers
> <http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ignore_headers>
> ?

Судя по выводу curl'а, между предыдущим заголовком и expires
вместо CRLF или LF стоит просто CR. В логах nginx'а при этом
должна быть какая-то такая ошибка:

2022/09/20 12:59:16 [error] 2866#100147: *1 upstream sent invalid header: "X-Foo: foo\x0d..." while reading response header from upstream...

Лечить это надо на бэкенде, подобных вольностей в обращении с
протоколом nginx не допускает и до какой-либо обработки заголовков
и/или их игнорирования тут дело не дойдёт, всё сломается при попытке
парсинга заголовков ответа.

Если в краткосрочной перспективе с бэкендом сделать ничего нельзя,
то в качестве временного workaround'а можно попробовать
проксировать по HTTP/2 через grpc_pass.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-leave@nginx.org
Subject Author Posted

игрорировать некорректные заголовки для upstream

Igor Savenko September 20, 2022 12:38PM

Re: игрорировать некорректные заголовки для upstream

Maxim Dounin September 20, 2022 01:42PM

Re: игрорировать некорректные заголовки для upstream

Igor Savenko September 20, 2022 01:52PM

Re: игрорировать некорректные заголовки для upstream

Maxim Dounin September 20, 2022 05:40PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 82
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready