Сама проблема в том, что nginx да, ругается в логе, но при этом он еще и
отдает 502 ошибку. Поэтому просто искали способ хотя бы игнорировать
некорректные заголовки, но пропускать ответ бекэнда клиенту
вт, 20 сент. 2022 г. в 20:41, Maxim Dounin <mdounin@mdounin.ru>:
> 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
>
_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-leave@nginx.org