Я рассматривал возможность переноса своих статических файлов на несколько исходных серверов, однако я заметил, что NGINX вычисляет разные Etags для идентично развернутых файлов на разных серверах, которые затем будут мешать нисходящим слоям кеширования, думая, что файлы продолжают меняться, чего нет.
Я хотел, чтобы Etag зависел от самого обслуживаемого файла, например с использованием MD5 или другого хэша содержимого (и, естественно, для NGINX, чтобы локально кэшировать это для производительности).
Возможно ли это с предоставленной службой статических файлов, или ожидается, что я решу эту проблему другим способом? например написать свое собственное приложение / сценарий "файлового сервера", которое вычисляет и кэширует хэш, или гарантирует, что все метаданные файловой системы (что бы они ни использовали) всегда каким-то образом идентичны?
Вместо этого можно использовать Apache или аналогичный.
как указано в Алгоритм генерации etag в nginx, nginx использует время последнего изменения и длину содержимого файлов для создания статических тегов файлов.
Поэтому, если вы получаете разные etags для одних и тех же статических файлов на разных внутренних серверах, есть вероятность, что временные метки ваших файлов не совпадают в точности (например, потому что вы проверяли их с помощью git в разное время).
Я не вижу никаких настроек nginx для настройки того, как nginx вычисляет etag, поэтому ваш единственный шанс с nginx - убедиться, что временные метки файлов точно такие же, например используя rsync или вручную устанавливая метки времени после извлечения файлов (для сценария, который устанавливает метки времени на последнюю метку времени, когда файл был зафиксирован, см. https://stackoverflow.com/questions/1964470/whats-the-equivalent-of-use-commit-times-for-git/13284229#13284229)