一般来说,ArcGIS Server会位于Web服务器之后的本地网络,在生产环境中,这个网络一般是保密的、位于防火墙之后的,这也是ArcGIS Server不建议在本地网络中启用防火墙的原因之一。但是,出于心理上的慰藉或者稀奇古怪(抑或有不得已的成分)的部署方式,不启用防火墙(或者启用了防火墙但是要开放诸如8399等端口)有时让人无法接受;或者,还有ArcGIS Server还被部署在不同的网段中等各种情况——这种时候,反向代理就需要登场了。
比如ArcGIS Server的访问方式是
http://:8399/arcgis/services/... ,在配置反向代理后,你应该就可以通过
http:///arcgis/services/... 来访问ArcGIS的服务了。同时,在配置代理的PROXY_HOST主机上,你可以只开放80端口;而所有的ArcGIS_HOST主机都位于代理主机之后,Web服务器只通过代理主机去使用ArcGIS服务,用户没有任何机会去直接访问ArcGIS Server。好,现在你想怎么部署ArcGIS Server就可以怎么部署了,只需要告诉代理主机你的ArcGIS Server在哪里,Web服务就可以使用这些服务——这时,ArcGIS Server对于Web服务器是透明的。
你可以使用Apache(mod_proxy模块)或者一些其它的服务器配置反向代理,我比较喜欢nginx的简洁和高效。比如使用下面的配置文件就可以配置一个负载均衡的反向代理服务器:
upstream arcgis{
#不同的ArcGIS Server主机
server 192.168.1.1:8399;
server 192.168.1.2:8399;
server 192.168.2.1:8399;
server 192.168.2.2:8399;
}
#不同的ArcGIS Server主机
server 192.168.1.1:8399;
server 192.168.1.2:8399;
server 192.168.2.1:8399;
server 192.168.2.2:8399;
}
server {
listen 80;
server_name localhost;
listen 80;
server_name localhost;
location / {
proxy_pass http://arcgis ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_504 http_404;
}
}
proxy_pass http://arcgis ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_504 http_404;
}
}
配置完成后,使用 nginx -s reload 命令重新载入配置,反向代理就更新了,此时直接访问代理主机的80端口就使用ArcGIS Server主机上的服务了。