<div dir="ltr">Сама проблема в том, что nginx да, ругается в логе, но при этом он еще и отдает 502 ошибку. Поэтому просто искали способ хотя бы игнорировать некорректные заголовки, но пропускать ответ бекэнда клиенту</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 20 сент. 2022 г. в 20:41, Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Tue, Sep 20, 2022 at 07:35:32PM +0300, Igor Savenko wrote:<br>
<br>
> Добрый день! Странная ситуация, апстримом для nginx является лайтспид, и<br>
> вот этот лайтспид на http2 отдает нормальные заголовки ответа, а для<br>
> http/1.1 некорректные, например, вот это выводит curl:<br>
> curl -s -v --http1.1 -o /dev/null <a href="https://domain.com/images/12345.png" rel="noreferrer" target="_blank">https://domain.com/images/12345.png</a><br>
> --resolve domain.com:443:1.2.3.4<br>
> ...<br>
> > GET /images/12345.png HTTP/1.1<br>
> > Host: <a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a><br>
> > User-Agent: curl/7.74.0<br>
> > Accept: */*<br>
> ><br>
> < HTTP/1.1 200 OK<br>
> < Connection: Keep-Alive<br>
> < Keep-Alive: timeout=5, max=100<br>
> expires: Thu, 20 Oct 2022 15:48:24 GMTc<br>
> < content-type: image/png<br>
> < last-modified: Tue, 08 Feb 2022 17:03:26 GMT<br>
> < accept-ranges: bytes<br>
> < content-length: 847<br>
> < date: Tue, 20 Sep 2022 15:48:24 GMT<br>
> < server: LiteSpeed<br>
> <br>
> Обратите внимание на начало заголовка expires, он не начинается с <<br>
> символа, следовательно, или в начале этого, или в конце предыдущего<br>
> заголовка приезжает некорректный символ. Насколько я знаю, nginx не<br>
> поддерживает http/2 для общения с апстримом. Отсюда вопрос. Есть дешевый<br>
> способ заставить nginx игнорировать некорректные произвольные заголовки<br>
> (полностью заголовок, а не только название) от апстрима, а не только<br>
> заранее определенные, как в директиве proxy_ignore_headers<br>
> <<a href="http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ignore_headers" rel="noreferrer" target="_blank">http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ignore_headers</a>><br>
> ?<br>
<br>
Судя по выводу curl'а, между предыдущим заголовком и expires <br>
вместо CRLF или LF стоит просто CR. В логах nginx'а при этом <br>
должна быть какая-то такая ошибка:<br>
<br>
2022/09/20 12:59:16 [error] 2866#100147: *1 upstream sent invalid header: "X-Foo: foo\x0d..." while reading response header from upstream...<br>
<br>
Лечить это надо на бэкенде, подобных вольностей в обращении с <br>
протоколом nginx не допускает и до какой-либо обработки заголовков <br>
и/или их игнорирования тут дело не дойдёт, всё сломается при попытке <br>
парсинга заголовков ответа.<br>
<br>
Если в краткосрочной перспективе с бэкендом сделать ничего нельзя, <br>
то в качестве временного workaround'а можно попробовать <br>
проксировать по HTTP/2 через grpc_pass.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-ru mailing list -- <a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-ru-leave@nginx.org" target="_blank">nginx-ru-leave@nginx.org</a><br>
</blockquote></div>