У меня есть сервер 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;
}
заранее спасибо
Решено!
Я сам понял, что запрос, отправленный балансировщиком нагрузки в вышестоящий ( сервер приложений) выполняется в HTTP / 1.0, в то время как сервер nginx на стороне приложения сжимал файлы только тогда, когда запрос был в HTTP> = 1.1, из-за параметров по умолчанию.
http://nginx.org/ ru / docs / http / ngx_http_gzip_module.html # gzip_http_version
Есть другой способ решить эту проблему. Вы можете установить более высокую версию протокола 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