Nginx не отправляет заархивированные ресурсы при прохождении через балансировщик нагрузки

У меня есть сервер nginx, работающий как балансировщик нагрузки, который делегирует запросы другим серверам приложений.

Когда я пытаюсь запросить ресурс непосредственно на сервере приложений, ресурс обслуживается в сжатом виде, пример:

➜ ~ curl -IH 'Accept-Encoding: gzip, deflate' http: // application / asset.css HTTP / 1.1 200 OK Сервер: nginx / 1.6.2 Дата: четверг, 15 сентября 2016 г., 14:13:03 GMT Content- Тип: text / css Content-Length: 35038 Connection: keep-alive Content-Encoding: gzip Срок действия: чт, 31 декабря 2037 г., 23:55 : 55 GMT Cache-Control: max-age = 315360000 Cache-Control: public

Хотя тот же запрос к балансировщику нагрузки возвращает несжатую версию ресурса. ➜ ~ curl -IH 'Accept-Encoding: gzip, deflate' https: //load-balancer/asset.css HTTP / 1.1 200 ОК Сервер: nginx / 1.6.2 Дата: четверг, 15 сентября 2016 г., 14:16:15 GMT Content-Type: text / css Content-Length: 240442 Connection: keep- жив Срок действия истекает: чт, 31 декабря 2037 г., 23:55:55 по Гринвичу Cache-Control: max-age = 315360000 Cache-Control: public Accept- Диапазоны: байты

Вот моя конфигурация для LB: location / { client_max_body_size 10M; proxy_set_header X- Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Host $ http_host; proxy_set_header X-Forwarded-Proto https; # при использовании ssl proxy_redirect off; proxy_pass http: // application; }

заранее спасибо

2
задан 15 September 2016 в 17:32
2 ответа

Решено!

Я сам понял, что запрос, отправленный балансировщиком нагрузки в вышестоящий ( сервер приложений) выполняется в HTTP / 1.0, в то время как сервер nginx на стороне приложения сжимал файлы только тогда, когда запрос был в HTTP> = 1.1, из-за параметров по умолчанию.

http://nginx.org/ ru / docs / http / ngx_http_gzip_module.html # gzip_http_version

2
ответ дан 3 December 2019 в 09:33

Есть другой способ решить эту проблему. Вы можете установить более высокую версию протокола HTTP для проксирования соединений в восходящий поток. Это можно сделать с помощью этого параметра: proxy_http_version 1.1;

Это был бы лучший выбор, потому что таким образом вы можете воспользоваться множеством преимуществ HTTP / 1.1, таких как постоянные соединения и Extra новые коды состояния .

Например, это мой собственный блок настроек:

server {
    listen       80;
    server_name  domain.tld;
    location / {
         include proxy_params;
         proxy_http_version 1.1;
         proxy_pass http://my-up-stream;
    }
}

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

3
ответ дан 3 December 2019 в 09:33

Теги

Похожие вопросы