Configuration varnish cache for multiple domain
Nuno Fernandes
npf-mlists at eurotux.com
Mon Jan 24 11:04:05 CET 2011
Hum.. in the very start of vcl_recv put:
if (req.http.host == "site3.com") {
set req.backend = site3;
}
if (req.http.host == "sitetwo.com") {
set req.backend = site2;
}
You are puting set req.backend very late in the configuration and, for example,
if a user uses a cookie
if (req.http.Authorization || req.http.Cookie) {
# /* Not cacheable by default */
return (pass);
}
you returns immediatly without setting the backend (so it's choosing the first
backend).
Best regads,
Nuno Fernandes
On Monday 24 January 2011, Hari Metkari wrote:
> Hi,
>
>
> I am implementing varnish cache for multiple seprate domain.i.e
> sitetwo.comand site3.com
>
> I am configured varnish cache on varnish server local ip address
> (192.168.126.30)
> and my one site ip address 192.168.126.20 and two site ip address
> 192.168.126.60
>
> I added multiple backend in VCL file.when I hit site one it calls to
> backend of site two instead of backend one.
> for single domain it's working fine but multiple domain not work.
>
> Please help me below some varnish cache configuration files.
> 1)/etc/sysconfig/varnish file
>
>
> VARNISH_VCL_CONF=/etc/varnish/default.vcl
> #
> # # Default address and port to bind to
> # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify
> # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets.
> VARNISH_LISTEN_ADDRESS=192.168.126.30
> #localhost default by hari
> VARNISH_LISTEN_PORT=80
> #6081 #by default by hari
> #
> # # Telnet admin interface listen address and port
> VARNISH_ADMIN_LISTEN_ADDRESS=192.168.126.30
> #127.0.0.1 #by default by hari
> VARNISH_ADMIN_LISTEN_PORT=6082
> #
> # # The minimum number of worker threads to start
> VARNISH_MIN_THREADS=1
> #
> # # The Maximum number of worker threads to start
> VARNISH_MAX_THREADS=1000
> #
> # # Idle timeout for worker threads
> VARNISH_THREAD_TIMEOUT=120
> #
> # # Cache file location
> VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
> #
> # # Cache file size: in bytes, optionally using k / M / G / T suffix,
> # # or in percentage of available disk space using the % suffix.
> VARNISH_STORAGE_SIZE=1G
> #
> # # Backend storage specification
> VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
> #
> # # Default TTL used when the backend does not specify one
> VARNISH_TTL=120
> #
> # # DAEMON_OPTS is used by the init script. If you add or remove options,
> make
> # # sure you update this section, too.
> DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
> -f ${VARNISH_VCL_CONF} \
> -T
> ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
> -t ${VARNISH_TTL} \
> -w
> ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
> -u varnish -g varnish \
> -s ${VARNISH_STORAGE}"
> #
> 2) /etc/varnish/default.vcl file
>
> backend site2 {
> .host = "sitetwo.com";
> .port = "8081";
> }
> backend site3 {
> .host = "site3.com";
> .port = "8080";
> }
> sub vcl_recv {
> if (req.request != "GET" &&
> req.request != "HEAD" &&
> req.request != "PUT" &&
> req.request != "POST" &&
> req.request != "TRACE" &&
> req.request != "OPTIONS" &&
> req.request != "DELETE") {
> # /* Non-RFC2616 or CONNECT which is weird. */
> return (pipe);
> }
> if (req.request != "GET" && req.request != "HEAD") {
> # /* We only deal with GET and HEAD by default */
> return (pass);
> }
> if (req.http.Authorization || req.http.Cookie) {
> # /* Not cacheable by default */
> return (pass);
> }
> if (req.http.host == "site3.com") {
> #You will need the following line only if your backend has multiple
> virtual host names
> set req.http.host = "site3.com";
> set req.http.X-Orig-Host = req.http.host;
> set req.backend = site3;
> return (lookup);
> }
> if (req.http.host == "sitetwo.com") {
> #You will need the following line only if your backend has multiple
> virtual host names
> set req.http.host = "sitetwo.com";
> set req.http.X-Orig-Host = req.http.host;
> set req.backend = site2;
> return (lookup);
> }
> return (lookup);
> }
> #
> sub vcl_pipe {
> # # Note that only the first request to the backend will have
> # # X-Forwarded-For set. If you use X-Forwarded-For and want to
> # # have it set for all requests, make sure to have:
> # # set req.http.connection = "close";
> # # here. It is not set by default as it might break some broken web
> # # applications, like IIS with NTLM authentication.
> return (pipe);
> }
> #
> sub vcl_pass {
> return (pass);
> }
> #
> sub vcl_hash {
> set req.hash += req.url;
> if (req.http.host) {
> set req.hash += req.http.host;
> } else {
> set req.hash += server.ip;
> }
> return (hash);
> }
> #
> sub vcl_hit {
> if (!obj.cacheable) {
> return (pass);
> }
> return (deliver);
> }
> #
> sub vcl_miss {
> return (fetch);
> }
> sub vcl_fetch {
> if (!obj.cacheable) {
> return (pass);
> }
> if (obj.http.Set-Cookie) {
> return (pass);
> }
> ##set obj.prefetch = 30s;
> #The following vcl code will make Varnish serve expired objects. All object
> will be kept up to two minutes past their expiration time or a fresh object
> is generated
> set obj.grace = 2m;
> return (deliver);
> }
> #
> sub vcl_deliver {
> return (deliver);
> }
>
> Thanks in Advanced
>
>
> Thanks,
> Hari Metkari
> +91-9881462183
More information about the varnish-misc
mailing list