NGINX 仅为特定目录和索引文件指定变量
NGINX specify variable for specific directory and index file only
我正在使用 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 ^(/[^/]+)$ .php last;
rewrite ^(/[^/]+)/(.*)$ .php?q= 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
错误,因为我认为具有变量设置的位置块正在被独占使用。
如果要根据原始请求设置变量,应使用带有 $request_uri
变量的 map
指令。有关详细信息,请参阅 this document。
例如:
map $request_uri $skip_cache {
default 1;
~^/user/ 0;
~^/objects/ 0;
}
server {
...
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
...
}
我正在使用 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 ^(/[^/]+)$ .php last;
rewrite ^(/[^/]+)/(.*)$ .php?q= 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
错误,因为我认为具有变量设置的位置块正在被独占使用。
如果要根据原始请求设置变量,应使用带有 $request_uri
变量的 map
指令。有关详细信息,请参阅 this document。
例如:
map $request_uri $skip_cache {
default 1;
~^/user/ 0;
~^/objects/ 0;
}
server {
...
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
...
}