Итак, я пытаюсь выполнить неподдерживаемую установку Docker.
Это означает запуск Ember CLI в собственном контейнере с общим томом на другом порту и проксированием, как ожидается, на сервер Rails.
К сожалению, для всех .css-ресурсов я получаю ошибку «Bad Gateway 502» как от curl, так и из браузера при полном доступе через HTTPS и обратный прокси nginx.
Похоже, что Ember CLI добавляет заголовок Content-Length, несмотря на то, что сервер Rails уже добавил transfer-encoding: chunked.
(Я могу проверить ответ от Rails и Ember, обратившись к разным портам).
Официально это, как я понимаю, не нарушает стандарт протокола HTTP 1.1 (он должен игнорироваться):
«Если сообщение получено одновременно с заголовком Transfer-Encoding и заголовком Content-Length, последний должен игнорироваться.»
… но это заставляет nginx отказываться работать, выдавать ошибку 502 и не отдавать ресурс, так что это не имеет значения.
Я могу открыть CSS-файл с помощью curl напрямую к контейнеру на localhost, но на уровне nginx он НЕ в восторге:
upstream sent "Content-Length" and "Transfer-Encoding" headers at the same time while reading response header from upstream
У кого-нибудь есть идеи, как заставить Ember CLI прекратить это делать, или есть обходной путь? Меня удивляет, что это не проблема при стандартной установке? (поскольку цепочка коммуникации должна быть очень похожей).
Версия Discourse — 2.8.9
Заголовок в логе (небольшие сокращения для краткости):
< content-transfer-encoding: binary
< content-type: text/css; charset=utf-8
< referrer-policy: strict-origin-when-cross-origin
< set-cookie: __profilin=p%3Dt; path=/forum; HttpOnly; SameSite=Lax
< **transfer-encoding: chunked**
< Vary: Accept, Accept-Encoding
< x-content-type-options: nosniff
< x-discourse-route: stylesheets/show
< x-download-options: noopen
< x-frame-options: SAMEORIGIN
< x-permitted-cross-domain-policies: none
< x-xss-protection: 0
< content-encoding: null
< **Content-Length: 3055**