NGINX указывает переменную только для определенного каталога и индексного файла - PullRequest
0 голосов
/ 18 февраля 2019

Я использую кэширование fastcgi и хотел бы указать, по каким URL-адресам кэш должен быть активен.

Я использую правило перезаписи, чтобы определить, к какому файлу контроллера получить доступ, и динамически устанавливать любые параметры запроса

Я хочу указать URL-адреса, в которых активирован кэш, и те, в которых он неактивен, это мой код:

server {
    listen 80;
    server_name domain.com;
    root /home/site/wwwroot;

    set %skip_cache 1;        #this is the variable that I want to set to 0 on specific URLS

    location / {
        try_files $uri $uri/ $uri.html @php;
    }
    location @php {         
        rewrite ^(/[^/]+)$ $1.php last;
        rewrite ^(/[^/]+)/(.*)$ $1.php?q=$2 last;
    }


    location /user/ {
        set $skip_cache 0;
    }

    location /objects/ {
        set $skip_cache 0;
    }

    location ~ \.php$  {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_split_path_info ^(.+?\.php)(/.*)?$;
        fastcgi_connect_timeout         300; 
        ...etc...

    #cache parameters
    fastcgi_param FASTCGI_CACHE 1;
    fastcgi_cache cfcache;
    fastcgi_cache_valid 30s;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    add_header X-FastCGI-Cache $upstream_cache_status;  
}

Как видите, переменная $ skip_cache установлена ​​в1 по умолчанию, и я хотел бы добавить в белый список URL-адреса для кэширования.

Пример, который я хотел бы кэшировать, это domain.com, domain.com/user/123 и domain.com/objects/456

В настоящее время, если я просматриваюдо /user/123, результатом является ошибка 404, так как я считаю, что блок местоположения с переменной настройкой используется исключительно.

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы хотите установить переменную на основе исходного запроса, вы должны использовать директиву map с переменной $request_uri.Подробнее см. в этом документе .

Например:

map $request_uri $skip_cache {
    default      1;
    ~^/user/     0;
    ~^/objects/  0;
}
server {
    ...
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    ...
}
...