Hi.

Dec 21, 2019 8:40:38 AM Christopher Faulet :

> Le 20/12/2019 à 15:53, Aleksandar Lazic a écrit :
>
> > Hi.
> >
> > Luckly that haproxy 2.1 have now the feature of fcgi proto it's now time to 
> > move
> > from nginx to haproxy for the loadbalancing part for me.
> >
> > There are several features from nginx conf which I would like to port to 
> > haproxy
> > conf therefore I need some help ;-)
> >
> > nginx offers a quite good caching feature like "fastcgi_cache_path". I know 
> > that
> > haproxy cache is only in memory. Have anyone a suggestion what's the "best" 
> > way
> > to cache the response from the fcgi backend?
> >
> > http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache_path
> >
> > That's the config values from nginx.
> >
> > ```
> > fastcgi_cache_path /opt/sde/nginx/fastcgi_cache_www levels=1:2 
> > use_temp_path=off
> > keys_zone=www:256m max_size=256m;
> > fastcgi_cache_key "$scheme$host$request_uri$is_args$args";
> >
> > fastcgi_cache_revalidate on;
> > fastcgi_cache_valid any 30s;
> > fastcgi_cache_use_stale error timeout updating http_500 http_503;
> > fastcgi_cache_lock on;
> >
> > ```
> >
> > I know that there is nuster but have not yet 2.1 in use.
> >
> >
>
> Hi Aleks,
>
> If the fcgi response is cacheable, you can use the HAProxy cache, just like 
> for
> any other HTTP/1.1 response. The fcgi and the cache are two orthogonal 
> feature.
> You may use a dedicated cache for fcgi response, with specifics max-age and
> max-object-size. About the "best" way to cache fcgi responses, it really 
> depends
> on your application. IMHO, it is your scripts responsibility to set the right
> "Cache-Control" header.

Thanks for answer.

I would also like to modify the cache key but for now only host and uri is used 
as you can see in the code.

http://git.haproxy.org/?p=haproxy.git;a=blob;f=src/cache.c;h=8e2acd1cb191ef5678efdd776e54df7112d76509;hb=HEAD#l10587
http://git.haproxy.org/?p=haproxy.git;a=blob;f=src/cache.c;h=8e2acd1cb191ef5678efdd776e54df7112d76509;hb=HEAD#l1136

I would like to set such a key.

> fastcgi_cache_key "$scheme$host$request_uri$is_args$args";

It's like a feature request for something like this.

option cache_key "%[schema]℅[req.fhdr(host)]℅[url]℅[path]℅[query]"

option cache_key "sdbm(%[schema]℅[req.fhdr(host)]℅[url]℅[path]℅[query])"

option cache_key "%[schema]℅[req.fhdr(host)]℅[url]℅[path]" if ! %[query]

option cache_key "%[schema]℅[req.fhdr(host)]℅[url]℅[path]?℅[query]" if %[query]


Which function can be used to resolve the variables an use it for the key?

I'm not sure if $is_args have a equivalent variable in haproxy.

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_is_args

Maybe the "option cache_key ... " should be able to have a "if/unless" 
possibility.

I could try to implement this ;-)

The idea is to have "option cache_key ..." and in " http_action_req_cache_use " 
check if the option is set if not use the current function else use the 
variables resolve function and make the sha2/xxhash64 hask key from the return 
of the variables resolve function.

Opinions?

> Regards,
> --
> Christopher Faulet


Regards
Aleks


Reply via email to