nginx и разный expires для разных файлов

grey109
На сайте с 15.06.2005
Offline
160
1621

Приветствую всех.

Я небольшой спец в nginx, потому прошу помощи у гуру.

Есть настроенный nginx, который отдает из папки download файлы и при этом устанавливает заголовок expires допустим в 30 дней. Если происходит обращение к файлу test.rar с параметром nocache (т.е. test.rar?nocache), то файл не кэшируется - для него expires устанавливается значение epoch. Мне нужно еще сделать чтобы для определенной подпапки устанавливалось значение expires, например в 1 час.

Сейчас все это сделано так:

location ~* ^/download/cache/ {

internal;

expires 1h;

root /site.ru;

}

location ~* ^/download/ {

internal;

expires max; #30d

if ($request_uri ~ \?nocache$) {

expires epoch;

}

root /site.ru;

}

Подскажите, я правильно делаю? Мне кажется как-то не так надо.

Дмитрий
На сайте с 23.08.2006
Offline
199
#1

Попробуйте после

if ($request_uri ~ \?nocache$) {
expires epoch;
}

Добавить

if ($request_uri ~ ^/download/another_folder/) {
expires 1h;
}
Разрабатываю и автоматизирую на php http://jonnyb.ru/
grey109
На сайте с 15.06.2005
Offline
160
#2

Не работает почему-то. Полный код:

location ~* ^/download/ {

internal;

expires 30d;

if ($request_uri ~ \?nocache$) {

expires epoch;

}

if ($request_uri ~ ^/download/cache/) {

expires 1h;

}

root /site.ru;

}

Дмитрий
На сайте с 23.08.2006
Offline
199
#3
grey109:
Не работает почему-то. Полный код:

location ~* ^/download/ {
internal;
expires 30d;

if ($request_uri ~ \?nocache$) {
expires epoch;
}

if ($request_uri ~ ^/download/cache/) {
expires 1h;
}

root /site.ru;
}

Странно, у меня работает.

png 181927.png
png 181928.png
Дмитрий
На сайте с 23.08.2006
Offline
199
#4

Вам директива internal точно нужна? Попробуйте убрать, если нет.

grey109
На сайте с 15.06.2005
Offline
160
#5

Завтра проверю еще раз.

internal - точно нужна, через нее реализованы контролируемые скачивания файлов.

grey109
На сайте с 15.06.2005
Offline
160
#6

Да, дело было в internal. Заменил в коде на

if ($uri ~ ^/download/cache/) {

и все заработало.

Спасибо.

HB
На сайте с 02.10.2014
Offline
75
#7

Избавляйтесь от if. Эта проверка осуществляется с каждым запросом к веб-серверу.

grey109
На сайте с 15.06.2005
Offline
160
#8

А можете привести пример вышенаписанного кода без if?

J
На сайте с 20.02.2014
Offline
120
jkm
#9


map $uri?$args $my_expires {
default 30d;
~\?nocache$ epoch;
~^/download/cache/ 1h;
}

server {
location ~ ^/download/ {
expires $my_expires;
}
grey109
На сайте с 15.06.2005
Offline
160
#10

Не знал о таком способе. Попробовал - работает, только есть один момент, но попробую разобраться с ним сам.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий