Como configurar o Nginx com o verniz

4

Gostaria de saber como configurar o Nginx e o Verniz.

Estou executando vários sites PHP e sites do Rack-Sinatra como hosts virtuais em dois IPs. Eu gostaria de evitar que o Nginx tenha que servir arquivos estáticos, já que estou percebendo alguns atrasos.

Editar : mudei para o Nginx, mas a resposta fornecida é muito fácil de migrar para o nginx.

    
por arbales 10.02.2010 / 20:51

2 respostas

6

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.

    
por 29.08.2010 / 16:12
0

Para o benefício dos futuros leitores, para o exemplo da VCL fornecido por rjk:

  • Eu usaria "remove" em vez de "unset" para a variável de cookie HTTP.
  • A declaração de sub-rotina 'vcl_fetch {' deve ser escrita como 'sub vcl_fetch {', também.

Caso contrário, localize. :)

    
por 08.01.2011 / 23:14