概述
為了提高服務的訪問速度,減輕geoserver服務的壓力,同時避免服務節點出現問題而影響服務訪問的穩定性,我們通常會通過部署多個geoserver來解決,但是部署了多個geoserver后,我們需要一個統一的接口提供出來供使用,nginx很好地可以這樣的需求,本文講講如何通過nginx實現多geoserver服務的負載均衡。
實現效果
實現
1. 多geoserver部署
為了保持geoserver的服務一致,我們先配置好一個geoserver服務,配置好之后將部署的tomcat復制,克隆多個出來,本文為演示復制了兩個(共三個geoserver),修改Tomcat的端口,使三個端口不沖突,復制好之后分別啟動三個Tomcat。
2. nginx配置
修改nginx.conf文件,配置信息如下:
#user??nobody; worker_processes??1; #error_log??logs/error.log; #error_log??logs/error.log??notice; #error_log??logs/error.log??info; #pid????????logs/nginx.pid; events?{ ????worker_connections??1024; } http?{ ????include???????mime.types; ????default_type??application/octet-stream; ????#log_format??main??'$remote_addr?-?$remote_user?[$time_local]?"$request"?' ????#??????????????????'$status?$body_bytes_sent?"$http_referer"?' ????#??????????????????'"$http_user_agent"?"$http_x_forwarded_for"'; ????#access_log??logs/access.log??main; ????sendfile????????on; ????#tcp_nopush?????on; ????#keepalive_timeout??0; ????keepalive_timeout??65; ????#gzip??on; ???? ????#?反向代理配置 ????upstream?server_list{ ???????#?這個是tomcat的訪問路徑 ???????server?localhost:8081; ???????server?localhost:8082; ???????server?localhost:8083; ????} ????server?{ ????????listen???????80; ????????server_name??localhost; ????? ????????location?/?{ ????????????add_header?'Access-Control-Allow-Origin'?$http_origin; ????????????add_header?'Access-Control-Allow-Credentials'?'true'; ????????????add_header?'Access-Control-Allow-Methods'?'GET,?POST,?OPTIONS'; ????????????add_header?'Access-Control-Allow-Headers'?'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; ????????????add_header?'Access-Control-Expose-Headers'?'Content-Length,Content-Range'; ????????????if?($request_method?=?'OPTIONS')?{ ????????????????add_header?'Access-Control-Max-Age'?1728000; ????????????????add_header?'Content-Type'?'text/plain;?charset=utf-8'; ????????????????add_header?'Content-Length'?0; ????????????????return?204; ????????????} ????????????root???html; ????????????proxy_pass?http://server_list; ????????????index??index.html?index.htm; ????????} ???????? ????????error_page???500?502?503?504??/50x.html; ????????location?=?/50x.html?{ ????????????root???html; ????????} ????} }
配置好nginx后,啟動nginx。
3. 前端調用
根據上述的配置,nginx的端口為80,因此geoserver的地址為http://localhost/geoserver,在ol中的調用代碼如下:
nbsp;html> ??<meta> ??<title>OpenLayers?map?preview</title> ??<link> ??<link> ??<script></script><div></div> <script> const options = { center: [52102781.07568731, 4456849.777083951], zoom: 3, minZoom: 0, maxZoom: 18 } const base = new ol.layer.Tile({ visible: true, source: new ol.source.OSM() }); const wms = new ol.layer.Tile({ source: new ol.source.TileWMS({ url: 'http://localhost/geoserver/mapbox/wms', params: {'LAYERS': 'mapbox:city', 'TILED': true}, serverType: 'geoserver', transition: 0 }) }) window.map = new ol.Map({ controls: ol.control.defaults({ attribution: false }).extend([new ol.control.ScaleLine()]), target: 'map', layers: [base, wms], view: new ol.View({ center: options.center, zoom: options.zoom, minZoom: options.minZoom, maxZoom: options.maxZoom }) }); </script>
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END