Для каких статических типов файлов Nginx генерирует ETag по умолчанию?

В современных версиях Nginx ETag автоматически генерируется для статических типов файлов, даже если вы специально не включаете блоки в своем местоположении или иным образом:

https://nginx.org/en/docs/http/ngx_http_core_module.html#etag

Например, ваши файлы PNG или JPEG, обслуживаемые Nginx, будут автоматически включать заголовки HTTP для ,last-modifiedи на статических файлах, которые не заархивированы gzip, даже если вы не включили их вручную...

Однако для каких типов файлов Nginx делает это по умолчанию? Когда я проверил это, включив расширения файлов в блок расположения статических файлов и добавив вручнуюetag onдля всех моих «статических» типов файлов (включая файлы, хотя они обычно не считаются статическими), Nginx удалил заголовок HTTP для моего .htmlфайлы (даже если это было жестко включено в блоке местоположения), но не другие типы файлов, такие как PNG или JPEG.

Обновление: это Cloudflare удалила etagзаголовок в моих файлах .html, а не в Nginx. Однако Nginx лишает content-lengthзаголовок, когда gzip включен для определенных типов файлов. Чтобы еще больше запутать ситуацию, Cloudflare автоматически добавляет gzip к некоторому контенту.

Я не вижу никакой документации по этому поводу... для каких типов файлов Nginx будет автоматически включать ETags, и для каких типов файлов Nginx будет игнорировать/удалять ETags по умолчанию?

Изменить: Эти обсуждения, связанные с gzip, могут быть связаны:

https://javorszky.co.uk/2019/03/28/etag-if-match-nginx-and-you/

https://forum.nginx.org/read.php?2,286645,286645#msg-286645

https://forum.nginx.org/read.php?2,240120,240120#msg-240120

https://stackoverflow.com/questions/55305687/how-to-address-weak-etags-conversion-by-nginx-on-gzip-compression

TIL, что Nginx удаляет слабые ETags из восходящих ответов при их сжатии для «Accept-Encoding: gzip». Спасибо, Интернет.

https://twitter.com/tomstuart/status/367994690517225472

1 ответ

Я обнаружил, что Nginx удаляет заголовок из файлов определенных типов, таких как мой.htmlфайлы, если на вашем сервере включен gzip. Однако заголовок, похоже, остается нетронутым, если вы не используете Cloudflare, который удаляет заголовки из определенного контента.

Чтобы еще больше запутать ситуацию, Cloudflare добавляет gzip к определенному контенту, даже если в Nginx gzip отключен… например, HTML или динамический контент и т. д.

Я все еще в замешательстве, поскольку насколько я понимаю , Nginx генерирует ETag на основе заголовков и, поэтому я не знаю, какetagзаголовок может оставаться, например, в файлах .html, .js или .css, которые уже сжимаются Nginx, поскольку в таких случаях Nginx уже удаляет их из-за включения gzip...

По словам одного чувака , использование статического gzip вместо этого может решить дилемму, но это еще одна проблема для тех, кто не заинтересован в использовании статического gzip.

Но вернемся к основному вопросу: для каких типов файлов Nginx генерирует Etags по умолчанию?... ну, я все еще не уверен в ответе на этот вопрос, но предполагаю, что, возможно, Nginx будет генерировать ETag для любого файла на диске, который имеетlast-modifiedвременная метка и статическое значение... даже если Nginx удаляетcontent-lengthиз-за gzip. Да, я тоже не понимаю.

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