Ghost 开源博客平台

Ghost 是一个简洁、强大的写作平台。你只须专注于用文字表达你的想法就好,其余的事情就让 Ghost 来帮你处理吧。

让 Nginx 直接分发 Ghost 中的静态文件

我们以当前最新版本 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,时间戳就会改变。

王赛
关于作者 王赛