提供静态内容的最佳方式

提供静态内容的最佳方式

目前,我从 mydomain.com 提供静态内容(jpg、png、css),如下所示:

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 wiki 为例):

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;
}

}

谢谢你的建议。

答案1

您的 proxy_pass 解决方案不会导致无 cookie 的域。您的动态内容将在 www.mydomain.com 上设置 cookie,您将回到起点(但会产生额外的不必要的延迟)。

第一个解决方案是两者中较好的一个,但最好的可能是类似 Amazon 的 CloudFront CDN,其静态内容来源为 www.mydomain.com。

答案2

使用代理传递会在一定程度上增加服务器负载,因为动态内容的每个连接都会首先通过代理,然后由实际服务器再次处理。因此,如果您遇到任何类型的负载问题,我建议您使用第一种解决方案。

答案3

Nginx vhost 是一个更好的想法,但是你应该研究一下 Varnish。

相关内容