Назад | Перейти на главную страницу

Может ли nginx проверить жесткие ссылки или символические ссылки и перенаправить клиент браузера на _реальный_ URL?

Представьте, что nginx обслуживает папку статических изображений, созданных rsnapshot: /rsnapshots/hourly.0/imageA.png /rsnapshots/hourly.0/imageB.png

Итак, если я пойду сюда: http://example.com/hourly.0/imageA.png, Я вижу ImageA.png

RSnapshot просто создаст жесткую ссылку, если файл не изменился с момента последнего резервного копирования. Итак, image imageA.png не изменился, а B - нет. Итак, моя недавняя резервная копия на сайте hourly.0 теперь будет выглядеть так: /rsnapshots/hourly.0/imageA.png /rsnapshots/hourly.0/imageB.png -> /rsnapshots/hourly.1/imageB.png

imageB.png это просто жесткая ссылка (а не символическая ссылка) на /rsnapshots/hourly.1/imageB.png.

Так что если клиент просит http://example.com/hourly.0/imageB.pngони получат imageB.png, но я мог бы перенаправить их на: http://example.com/hourly.1/imageB.png, и они получат то же изображение.

Возможно ли, чтобы nginx A) обнаружил жесткие ссылки B) перенаправил клиента на "настоящий" файл, если он его обнаружил?

Изменить: как проницательно заметил Майкл, когда речь идет о жестких ссылках, не существует "настоящего" файла. Они оба просто указатели на один и тот же файл. В этом случае я могу придумать две модификации своего вопроса: 1) Может ли Nginx проверять другие серверные каталоги по запросу, проверять наличие файла и, если он находит файл по другому пути, перенаправить клиента на другой путь. 2) Если я заменил "жесткие ссылки" в моем вопросе на "символические ссылки", могу ли я провести тест для символической ссылки, определить, куда идет символическая ссылка, а затем вместо этого перенаправить на путь символической ссылки?

AFAIK nginx не может этого сделать, но есть и другие способы, например:

  • генерировать файл конфигурации nginx с перенаправлениями после каждого резервного копирования
  • добавьте /elsewhere/index.php, который будет использовать $ _SERVER ['PATH_INFO'] для поиска и перенаправления на самый новый файл, тогда вы откроете http://example.com/elsewhere/index.php/imageB.png