我们以当前最新版本 Ghost v0.4.x
为例,说说如何通过 Nginx 直接分发 Ghost 中的静态文件,从而提升 Ghost 系统的性能。
我们都知道 Nginx 在分发静态文件方面效率非常高,如果你在用 Nginx 做 Ghost 的反向代理的话,直接让 Nginx 分发 Ghost 中的静态文件(比如图片、CSS、JavaScript 等)的话,对提升 Ghost 的执行效率将是大有帮助的。
任何一个 Ghost 博客,从浏览器端能够访问到的静态文件有如下几个地址。左侧是 URL 路径,右侧是文件系统路径(假设 Ghost 安装在 /srv/ghost/
目录下):
/content/images
:对应的系统目录是/srv/ghost/content/images
/assets
:对应的系统目录是/srv/ghost/content/themes/(your theme name)/assets
/shared
:对应的系统目录是/srv/ghost/core/shared
/ghost/scripts
:对应的系统目录是/srv/ghost/core/built/scripts
/ghost
:对应的系统目录是/srv/ghost/core/client/assets
注意:
- 第一个路径存放的是所有上传到系统的图片。引用这些图片时,系统默认只能通过
/content/images
地址访问- 第二个路径是用户所采用的主题中存放静态文件的目录
- 其余三个路径是 Ghost 系统所保留的
既然知道了各自的对应关系,我们就可以动手改造 Nginx 的配置文件,让 Nginx 直接 分发这些静态内容!
# 到 Ghost 的反向请求
location / {
include /etc/nginx/proxy_params;
proxy_pass http://localhost:2368;
}
# 处理特定路径
location /content/images {
alias /srv/ghost/content/images;
expires max;
}
location /assets {
alias /srv/ghost/content/themes/(your theme name)/assets;
expires max;
}
location /shared {
alias /srv/ghost/core/shared;
expires max;
}
location /ghost/scripts {
alias /srv/ghost/core/built/scripts;
expires max;
}
location /ghost {
alias /srv/ghost/core/client/assets;
expires max;
}
Ghost 系统会为每个静态文件附加一个时间戳,因此,上述特定路径的配置中,expires
都配置了最长缓存时间,
注意:Ghost 主题文件中对静态文件的引用都应该是
{{asset xxxx.xxx}}
形式,也就是用 Ghost 提供的assets
指令,这样就能为每个静态文件附加一个时间戳了。注意:在 Ghost v0.4.x 版本中,Ghost 为静态文件所添加的时间戳是
Ghost 版本号 + Ghost 系统启动时的时间
的 MD5 值,也就是说,你每重启一次 Ghost,时间戳就会改变。