首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGINX仅为特定目录和索引文件指定变量

NGINX仅为特定目录和索引文件指定变量
EN

Stack Overflow用户
提问于 2019-02-18 06:18:07
回答 1查看 237关注 0票数 1

我正在使用fastcgi缓存,并希望指定缓存应该在哪些URL上激活。

我使用重写规则来确定要访问哪个控制器文件,并动态设置任何查询参数

我想指定其中缓存被激活的URL,以及缓存处于非活动状态的URL,这是我的代码:

代码语言:javascript
复制
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.comdomain.com/user/123domain.com/objects/456

目前,如果我浏览到/user/123,结果是一个404错误,因为我相信具有变量设置的location块正被独占地使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 06:35:04

如果要根据原始请求设置变量,则应使用带有$request_uri变量的map指令。详情请参见this document

例如:

代码语言:javascript
复制
map $request_uri $skip_cache {
    default      1;
    ~^/user/     0;
    ~^/objects/  0;
}
server {
    ...
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54738215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档