Я бы хотел посмотреть, как настроить Nginx и Varnish.
Я использую несколько сайтов PHP и сайтов Rack-Sinatra в качестве виртуальных хостов на двух IP. Я бы хотел, чтобы Nginx не обслуживал статические файлы, так как я замечаю некоторые задержки.
редактировать: Я перешел на Nginx, но полученный ответ довольно легко перенести на nginx.
Apache по-прежнему будет обслуживать статические файлы, но только их один раз. Возможно, самый простой способ - настроить varnish для прослушивания всех IP-адресов для порта 80 и настроить Apache для прослушивания на localhost:8000
например. Затем вы настраиваете varnish для пересылки всех полученных запросов на localhost:8000
для обработки Apache.
Я бы выбрал конфигурацию лака:
# have varnish listen on port 80 (all addresses)
varnishd -a 0.0.0.0:80
Теперь в вашем 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;
}
}
Теперь в вашем Apache httpd.conf
конфигурации, вы хотите, чтобы Apache слушал localhost:8000
и определите свои виртуальные хосты по тому же адресу: порт
Listen 127.0.0.1:8000
NameVirtualHost 127.0.0.1:8000
Для каждого веб-сайта создайте <VirtualHost>
строфа. В этом разделе вам нужно указать Apache, чтобы Expires
и заголовки управления кешем для всего статического контента, чтобы varnish знал, как его кэшировать.
<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>
Надеюсь, это поможет.
Для удобства будущих читателей, для примера VCL, предоставленный rjk:
В противном случае - на место. :)