NGINX Reverse Proxy: proxy_cache à l'intérieur si block – Possible?

Je pense que commencer par un petit extrait serait le plus judicieux:

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; } } 

Donc, en substance, ce que nous voulons faire, c'est de configurer la caching du proxy sur la base d'une déclaration IF coniditonale.

Ce qui précède ne fonctionne pas, car proxy_cache n'est pas valide dans IF.

Est-ce que quelqu'un sait comment proxy le cache en fonction d'une correspondance regexp sur l'une des nombreuses variables internes de nginx?

Remarque:

Nous voulons essentiellement désactiver / activer proxy_caching en fonction de $ remote_addr regexp. Ne spécifiez pas différentes valeurs proxy_cache.

Merci.

Il semble que ce que vous voulez vraiment, c'est de combiner une variable géo avec proxy_cache_bypass et 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; } } 

«Si» est généralement une mauvaise pratique dans la configuration nginx. Vous pouvez utiliser le module cartographique pour que les choses fonctionnent. voir 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 { ... }