Мой http
block определяет различные правила gzip. Затем, когда у меня есть предварительно скомпилированные файлы gzip, я использую gzip_static
модуль. то есть что-то вроде:
http {
gzip on;
#...
server {
#other vhost rules
location /assets/ {
gzip_static on;
}
}
}
Для URL-адресов, которые не запускаются / не устанавливаются, nginx отправляет заголовок Content-Encoding: gzip
. Однако URL-адреса, такие как /assets/css/style.css
обязательно вернет скомпилированный ответ, но без заголовка Content-Encoding.
Это ожидаемое поведение? Как настроить nginx?
Просто включить его с помощью gzip_static для меня не сработало. Мне пришлось использовать gzip_proxied, прежде чем он начал работать.
location /as/ {
gzip_static on;
gzip_proxied expired no-cache no-store private auth;
gzip_min_length 500; # optional
gzip_types text/plain application/xml text/css; # optional
add_header Z_LOCATION "gz static location block"; add_header URI $uri; # DEBUG info
}
Обратите внимание, что последняя строка добавляет еще два заголовка, которые помогают отладить. Вы можете увидеть это, используя отличный плагин для Firefox под названием «Live HTTP Headers», который я нашел очень полезным для отладки множества вещей, связанных с заголовками и кешированием. Обратите внимание, что «curl -I» не работает, поскольку он не отправляет заголовок, в котором говорится, что он принимает кодировку gzip.
Вы также должны убедиться, что файлы имеют одинаковую дату изменения.
touch style.css style.css.gz
Вот заголовки, которые я получаю, когда использую конфигурацию местоположения выше
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 06 Jan 2016 20:07:18 GMT
Content-Type: text/css
Last-Modified: Wed, 06 Jan 2016 19:55:15 GMT
Etag: "568d7123-84c"
Z_LOCATION: gz static location block
URI: /as/style.css
Via: 1.1 BC5-ACLD
Connection: Keep-Alive
Content-Encoding: gzip
Age: 0
У меня есть location ~* \.(css|js|...) { expires 7d }
блок, который все испортил. Я поиграл с блоками локации, и теперь все вроде работает.