ArcGIS Server前端Varnish缓存解决方案
前一阵子,有客户反馈到ArcGIS Server功能虽好,但在面向大量高并发请求时,经常会导致内置的tomcat服务器响应不过来,希望能针对静态内容,例如切片、服务目录这些内容能提供一个缓存机制。
联想到Varnish作为业界主流的缓存软件,笔者就提出了采用Varnish作为ArcGIS Server前端缓存代理的一个配置方案。其总体配置架构如下图:
Web服务器配置:CentOS 7 Linux
Nginx版本:1.16.1
Varnish版本: 6.0.5
步骤
下载并编译Varnish。
找到Varnish服务所使用的配置文件。
systemctl status -l | grep varnish
通过返回的描述中可知,当前使用的配置文件为/etc/varnish/default.vcl
启用GIS服务器的HTTP端口
访问admin REST接口,访问security\config\update进行更新。
添加GIS服务器。
打开default.vcl,在默认的backend中添加GIS服务器的地址。
backend default {
.host = “192.168.1.83”
.port = “6080“
修改GIS服务REST地址的HTTP请求Header。
修改default.vcl,在vcl_recv子程序上添加:
if(req.url ~ “^/arcgis”) {
unset req.http.Cookie;
unset req.http. Cache-Control;
修改default.vcl,在vcl_backend.fetch子程序上添加:
unset berep.http.X-Forward-For;
unset berep.http.Cache-Control;
unset berep.http.Vary;
set beresp.ttl =120s;
使用varnishstat命令来检查是否缓存机制是否生效。在命令行窗口中输入:
varnishstat -f MAIN.cache_hit
打开浏览器,访问ArcGIS Server REST 服务目录中任意服务的地址,例如:
http://192.168.31.38:6081/arcgis/rest/services/Guangzhou/MapServer?f=json
第一次访问的时候,应该会在监控命令行窗口看到以下字样:
MAIN.cache_miss 1
这代表初次访问时,由于没有缓存记录,所以没有命中。
后续再次访问上述URL地址时,应该会在监控命令行窗口看到以下字样:
MAIN.cache_hit 1
这代表查找到了缓存记录,命中次数为一次。