Как я могу использовать nginx brotli_static с proxy_pass?

nginx скомпилирован с включенным Brotli. В моем nginx.conf

http {
    ...
    brotli_static on;
}

Мои файлы.br находятся на сервере с proxy_pass,

location / {
    ...
    proxy_pass http://app;
}

И.br файлы были созданы на этом app сервер:

$ ls -lh public/js/dist/index.js*
-rw-r--r-- 1 mike wheel 1.2M Apr  4 09:07 public/js/dist/index.js
-rw-r--r-- 1 mike wheel 201K Apr  4 09:07 public/js/dist/index.js.br

Снос несжатого файла работает:

wget https://example.com/js/dist/index.js

Распаковывает несжатый файл размером 1 157 704.

wget -S --header="accept-encoding: gzip" https://example.com/js/dist/index.js

Распаковывает сжатый файл размером 309,360.

Но:

wget -S --header="accept-encoding: br" https://example.com/js/dist/index.js

Все еще получает полный несжатый файл размером 1,157,704.

Я надеялся brotli_static будет также передавать запросы к файлу.br - посылать что-нибудь запрос GET на сервер для эквивалентного ресурса.br - но это, похоже, не работает.

Может ли brotli_static работать через proxy_pass?

2 ответа

Решение

Основываясь на комментарии Максима Дунина ( главного инженера nginx) к gzip_static, который, как мне кажется, brotli_static ведет себя аналогично - brotli_static обрабатывает только файлы, а не ресурсы HTTP:

То есть ожидается, что gzip_static будет работать только тогда, когда nginx собирается вернуть обычные файлы.

Похоже, что brotli_static и proxy_pass невозможны.

В вашем конфигурационном файле nginx должен быть раздел, указывающий, что он должен обслуживать папку со статическим содержимым. Вы не хотите, чтобы ваш сервер приложений делал это.

Я полагаю, вам нужно разместить его до location / так что это имеет приоритет.

Другие вопросы по тегам