У меня есть много запросов HTTP POST, отправляемых на сервер nginx, которые затем уравновешивают нагрузку на набор обратных прокси-серверов node.js/express.js. Чтобы сэкономить некоторое сетевое потребление, полезная нагрузка отправляется с использованием GZIP и заголовка Content-Encoding: gzip.Nginx gunzip POST-запросы на backend
Я пытаюсь добиться чего-то вроде этого:
[Client] [Nginx Reverse Proxy] [BackEnd] | [gziped payload] | [raw payload] |
|--------------------> | ----------------------------->| | | |
| [Raw Response] | [Raw response] | | <------------------ | <-----------------------------| | | |
По соображениям эффективности я хочу запустить Gunzip на Nginx пока я не был в состоянии сделать это. Вот файл HTTP nginx.conf:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
gunzip on;
location/{
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
Вот пример запроса:
echo "{"id": 0,"mypayload":"This is an example"}" | gzip -c - | curl -v -i -X POST -H 'Content-Encoding: gzip' --data-binary '@-' http://localhost/test
Я хотел Nginx, чтобы распаковать содержимое полезной нагрузки и доставить сырой контент на внутренний сервер, но содержимое до сих пор поставляется сжатым.
Я видел много людей, которые делают наоборот (ответы Nginx gziping и даже ответные ответы на запросы клиентов, у которых нет заголовка Accept-Encoding: gzip), но не смогли найти его с помощью gunziping полезных нагрузок на бэкэнд ,
Любые подсказки?
Вы нашли ответ на этот вопрос еще? Какой процесс вы в конечном итоге прошли? – bibstha
@bibstha пока я делаю gzip-декодирование на бэкэнде. Если я не могу найти альтернативу с помощью Nginx, я бы разработал простой обратный прокси-сервер с обратным прокси-сервером, чтобы сделать это после Nginx или код модуля LUA для обработки этих случаев. – Tallis