社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

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

JimmyBanks • 4 年前 • 496 次点击  

我正在使用fastcgi缓存,并希望指定缓存应该在哪些url上处于活动状态。

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

我想指定激活缓存的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 错误,因为我认为具有变量设置的位置块正在被独占使用。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52145
 
496 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Richard Smith
Reply   •   1 楼
Richard Smith    5 年前

如果要基于原始请求设置变量,应使用 map 指令与 $request_uri 变量。见 this document 详细情况。

例如:

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