nginx местоположение с неизвестной глубиной подпапки - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел бы иметь собственное местоположение для изображений, чтобы установить лучшее значение expires и удалить их из access.log.

Локальный путь для изображения будет выглядеть следующим образом /var/www/html/public/image/user/{username}/{?subfolder}/filename.jpg

Может быть одна или несколько подпапок, в которых находится изображение.

URL должен выглядеть как http://example.com/image/user/{username}/{?subfolder}/filename.jpg. Так как в user могут быть разные папки с разной глубиной папки, я не могу жестко закодировать его.

Я пробовал это с этим правилом расположения, но nginx пытается найти его по умолчанию root и не в указанном.

location /image/[^\\]+/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    root /var/www/html/public/image;
    expires           30d;
}

Я попробовал выражение на тестере PCRE, и оно прошло успешно. Ценю любую помощь с этим.

1 Ответ

1 голос
/ 25 февраля 2020

Если вы установите root, как в вашем примере, на /var/www/html/public/image, то запрос на /image/user/foo.jpg закончится на /var/www/html/public/image/image/user/foo.jpg, что нежелательно. Поэтому я не думаю, что вам следует нажимать root (оно должно указывать на public dir).

Просто:

location ^/image/.*/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    expires 30d;
}

выполнит эту работу.

Если ваши имена файлов каким-то образом хешированы / версионированы (например, foo.123.jpg), вы можете использовать immutable для агрессивного кэширования:

location ^/image/.*/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    immutable on;
}
...