Думаю, разумнее всего было бы начать с небольшого фрагмента:
location ^~ /test/ {
proxy_pass http://frontend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $server_port;
if ( $remote_addr ~* "123.123.123.123" ) {
proxy_cache cache_base;
proxy_cache_valid 720m;
}
}
Итак, по сути, то, что мы хотим сделать, - это настроить кэширование прокси на основе условного оператора IF.
Вышеуказанное не работает, поскольку proxy_cache недействителен внутри IF.
Кто-нибудь знает, как прокси-кеш на основе совпадения регулярного выражения для одной из многих внутренних переменных nginx?
Примечание:
Мы хотим в основном отключить / включить proxy_caching на основе регулярного выражения $ remote_addr. Не указывать разные значения proxy_cache.
Спасибо.
Похоже, что вы действительно хотите объединить гео переменная с proxy_cache_bypass и proxy_no_cache:
geo $skip_cache {
default 1;
123.123.123.123/32 0;
1.2.3.4/32 0;
10.0.0.0/8 0;
}
server {
location ^~ /test/ {
proxy_pass http://frontend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $server_port;
proxy_cache cache_base;
proxy_cache_valid 720m;
# When $skip_cache is 1, the cache will be bypassed, and
# the response won't be eligible for caching.
proxy_cache_bypass $skip_cache;
proxy_no_cache $skip_cache;
}
}
«Если» - обычно плохая практика в конфигурации nginx. Вы можете использовать модуль карты, чтобы все работало. видеть http://nginx.org/en/docs/http/ngx_http_map_module.html http://wiki.nginx.org/HttpMapModule
map $remote_addr $matched_ip_location {
123.123.123.123 @cache;
default @default;
}
...
location ^~ /test/ {
...
rewrite ^ $matched_ip_location
}
location @cache {
...
proxy_cache cache_base;
proxy_cache_valid 720m;
}
location @default {
...
}