Назад | Перейти на главную страницу

Лучший способ обслуживания статического контента

На данный момент я обслуживаю свой статический контент (jpg, png, css) с mydomain.com следующим образом:

location ~* \.(jpg|jpeg|gif|css|png|js|ico)$ {
root /home/www/mydomain/current/web;
add_header        Cache-Control public;
expires        365d;
access_log     off;
}

Я бы хотел, чтобы он работал со static.mydomain.com, чтобы он не содержал файлов cookie и имел лучшую производительность.

Что лучше? Добавьте новый раздел сервера в мою конфигурацию nginx vhost примерно так:

server {
    listen  192.168.2.25:80;
    server_name     static.mydomain.com;
    root /home/www/mydomain/current/web;

    location / {
   return 404;
    }

    location ~ \.(?:jpg|css|gif|png|swf|ico|mp3)$ {
add_header        Cache-Control public;
    }
}

Или прокси-передайте такой запрос динамического контента (например, вики nginx):

server { 
listen       192.168.2.25:80;
server_name  www.mydomain.com;

# serve static files
location ~ ^/(images|javascript|js|css|flash|media|static)/  {
  root    /var/www/virtual/big.server.com/htdocs;
  expires 30d;
}

# pass requests for dynamic content to rails/turbogears/zope, et al
location / {
  proxy_pass      http://127.0.0.1:8080;
}

}

Спасибо за советы.

Ваше решение proxy_pass не приведет к созданию домена без файлов cookie. Ваш динамический контент установит файлы cookie на www.mydomain.com, и вы вернетесь туда, откуда начали (но с дополнительной ненужной задержкой).

Первое решение является лучшим из двух, но лучшим может быть что-то вроде Amazon CloudFront CDN с источником www.mydomain.com для статического контента.

Использование proxy-pass несколько увеличит нагрузку на сервер, потому что каждое соединение для динамического контента сначала будет проходить через прокси, а затем второй раз обрабатываться реальным сервером. Так что, если у вас возникли какие-либо проблемы с нагрузкой, я бы порекомендовал первое решение.

Nginx vhost - лучшая идея, но Varnish - это то, на что вам стоит обратить внимание.