目前,我从 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。