Как я могу использовать 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 /
так что это имеет приоритет.