O Apache ainda servirá arquivos estáticos, mas só os servirá uma vez . Talvez a maneira mais fácil seja configurar o verniz para escutar em todos os endereços IP da porta 80 e configurar o Apache para ouvir em localhost:8000
, por exemplo. Em seguida, você configura o verniz para encaminhar todas as solicitações recebidas para localhost:8000
para o Apache.
Eu iria com uma configuração de verniz de:
# have varnish listen on port 80 (all addresses)
varnishd -a 0.0.0.0:80
Agora, dentro do seu arquivo vcl
:
backend default {
.host = "localhost";
.port = "8000";
}
sub vcl_recv {
# add a unique header containing the client IP address
set req.http.X-Orig-Forwarded-For = client.ip;
# we're only handling static content for now so remove any
# Cookie that was sent in the request as that makes caching
# impossible.
if (req.url ~ "\.(jpe?g|png|gif|ico|js|css)(\?.*|)$") {
unset req.http.cookie;
}
}
vcl_fetch {
# if the backend server adds a cookie to all responses,
# remove it from static content so that it can be cached.
if (req.url ~ "\.(jpe?g|png|gif|ico|js|css)(\?.*|)$") {
unset obj.http.set-cookie;
}
}
Agora, dentro da sua configuração do Apache httpd.conf
, você deseja que o Apache ouça em localhost:8000
e defina seus hosts virtuais no mesmo endereço: port
Listen 127.0.0.1:8000
NameVirtualHost 127.0.0.1:8000
Para cada site, crie uma estrofe <VirtualHost>
. Dentro dessa estrofe, você precisa dizer ao Apache para definir os cabeçalhos Expires
e de controle de cache em todo o conteúdo estático, para que o verniz saiba armazená-lo em cache.
<VirtualHost 127.0.0.1:8000>
ServerName www.our-example-domain.com
# Set expires and cache-control headers on static content and
# tell caches that the static content is valid for two years
ExpiresActive on
<FilesMatch "\.(js|css|ico|gif|png|jpe?g)$">
ExpiresDefault "access plus 2 year"
Header append Cache-Control "public"
</FilesMatch>
# ... the rest of your web site configuration ...
</VirtualHost>
Espero que isso ajude.