Nginx всегда подменяет http-заголовок Server и всегда там будет указан nginx, не важно, запрос был передан на apache-бэкэнд или обработан полностью самостоятельно.
А вы уверены, что операционная система внутри virtualbox-а вообще видит этот новый файл? Я к тому, что вы думаете дело только в mtime? Возможно virtualbox просто закешировал и содержимое файла.
Можно заставить nginx игнорировать заголовок If-Modified-Since с помощью директивы: if_modified_since off;
ims — это unix timestamp полученный из парсинга http заголовка If-Modified-Since, который прислал браузер,
а lm — это время последнего изменения файла, а именно st_mtime который вернул системный вызов stat (см. man 2 stat).
Собственно все отработало верно. Nginx честно ответил браузеру 304 Not Modified. Файл с последнего запроса не менялся.
Судя по логу, nginx не видит, что файл изменился. Nginx делает системный вызов stat и получает устаревшую информацию. Почему он получает устаревшую информацию? Это уже скорее всего вопрос к VirtualBox-у.
Subrequest-ты на каждый запрос + обработка SSI — не дешевое развлечение.
Каким же образом уменьшается гибкость? В своем скрипте вы вольны сделать как угодно, реализовать любую логику. В случае SSI, вы сильно ограничены его скудным синтаксисом.
Иными словами, вы, вместо того, чтобы написать простейший скрипт, который бы делал это один раз, при деплойменте сайта, собираетесь повесить дополнительную нагрузку на веб-сервер. Чтобы на каждый запрос увеличилось в несколько раз количество системных вызовов, которые нужно сделать, количество подзапросов, обращений к диску и т. д. Это вас не беспокоит?
Экранировать / не нужно, кроме того, если вам не требуется выделение, то лучше указать это явно (?:, чтобы не расходовать в пустую ресурсы на каждый запрос.
mailman.nginx.org/pipermail/nginx-ru/2012-January/045415.html