Назад | Перейти на главную страницу

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

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

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

➜ ~ curl -IH 'Accept-Encoding: gzip, deflate' http://application/asset.css HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:13:03 GMT Content-Type: text/css Content-Length: 35038 Connection: keep-alive Content-Encoding: gzip Expires: Thu, 31 Dec 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 OK Server: nginx/1.6.2 Date: Thu, 15 Sep 2016 14:16:15 GMT Content-Type: text/css Content-Length: 240442 Connection: keep-alive Expires: Thu, 31 Dec 2037 23:55:55 GMT Cache-Control: max-age=315360000 Cache-Control: public Accept-Ranges: bytes

Вот моя конфигурация для 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; # if use ssl proxy_redirect off; proxy_pass http://application; }

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

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

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

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

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

Решено!

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

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