iServer服务与nginx代理

背景

使用iServer发布服务的时候经常会涉及到nginx代理,负载集群或者反向代理,都是常见的使用场景,下面就nginx代理iServer服务的一些问题做个简单总结。

代理iServer服务之基本配置

①配置upstream,负载集群配置

	upstream iserver  {
		#ip_hash;
		#hash $request_uri;
		server 192.168.16.20.9:8090; #Apache
		server 192.168.16.31:8090; #Apache
		server 192.168.16.32:8090; #Apache
	}

②配置location

		location /iserver/{
		    proxy_pass    http://iserver/;	
			proxy_set_header   Host $host:$server_port;
			proxy_set_header   X-Real-IP $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;			
        }

代理iServer服务之二级域名

iServer通过nginx代理后,地址名称一般都是iServer,那能否随意指定这个名称呢?答案是可以的,配合相关的替换规则即可

域名
location /iserver_3d/ {
           proxy_pass   http://iserver_3d/iserver/;
           #Proxy Settings
           proxy_redirect     off;
           proxy_set_header   Host $host:8088;
           proxy_set_header   X-Real-IP $remote_addr;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
           proxy_max_temp_file_size 0;
           proxy_connect_timeout 300;            
           proxy_send_timeout 300;                
           proxy_read_timeout 600;                
           proxy_buffer_size 256k;                
           proxy_buffers 4 256k;                  
           proxy_busy_buffers_size 256k;          
           proxy_temp_file_write_size 256k;
           sub_filter_once off;
           sub_filter_types *;
           sub_filter 'http://localhost:8088/iserver/' 'http://localhost:8088/iserver_3d/';
        }

代理iServer服务之三维场景服务

当使用iServer代理三维场景服务时,请求三维场景集合时,返回结果中会返回iServer内部地址,此时需要通过过滤配置来实现地址的替换

location /mapservices/{
	proxy_pass    http://192.168.16.151:8100;
	proxy_set_header   Host $host:$server_port;
	proxy_set_header   X-Real-IP $remote_addr;
	proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_connect_timeout      60s;
	proxy_send_timeout         60s;
	  proxy_read_timeout         60s;
	client_max_body_size   100m;
	
	#三维场景服务过滤配置
	sub_filter_once off;
	sub_filter_types *;
	sub_filter 'http://192.168.16.151:8100/iserver/' 'http://www.supermap.com:8100/mapservices/iserver/';
}

代理iServer服务之会话保持(三维login)

当使用iServer代理三维场景服务时,且有多个iServer节点时,客户端加载场景服务会执行两次login请求,获得场景配置信息,两次login请求必须负载到同一个节点,否则会报错造成场景无法加载

nginx配置如下,增加一个login请求判断,login请求负载到会话保持配置,否则执行默认负载

	upstream iserver  {
		#ip_hash;
		#hash $request_uri;
		server 192.168.16.20.9:8090; #Apache
		server 192.168.16.31:8090; #Apache
		server 192.168.16.32:8090; #Apache
	}
	
	upstream iserver_session  {
		#会话保持
		ip_hash;
		server 192.168.16.20.9:8090; #Apache
		server 192.168.16.31:8090; #Apache
		server 192.168.16.32:8090; #Apache
	}

		location /iserver/{
			if ($request_uri ~ realspace/login.json) {
				proxy_pass   http://iserver_session;
				break;
			}
			proxy_pass  http://iserver;
			proxy_ssl_session_reuse 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_connect_timeout      5s;
			proxy_send_timeout         5s;
      		proxy_read_timeout         5s;
			client_max_body_size   100m;
			proxy_redirect default;
		}

代理iServer服务之标绘服务

与三维场景服务一样,标绘服务代理时请求标号库也会遇到内部iServer地址暴露信息,与三维场景服务区别在于,标绘服务返回结果进行了压缩处理,配置替换规则时需要增加压缩配置,避免替换失败。

标绘服务
location /server/{
	proxy_pass    http://server/;    
	proxy_set_header   Host $host:$server_port;
	proxy_set_header   X-Real-IP $remote_addr;
	proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;        
	#服务过滤配置,gzip压缩格式支持
	proxy_set_header Accept-Encoding deflate;
	#服务过滤配置
	sub_filter_once off;
	sub_filter_types *;
	sub_filter 'http://www.test.com:80/iserver/output/SymbolIcon/' 'https://www.test.com:65533/server/iserver/output/SymbolIcon/';    
	sub_filter 'http://192.168.16.11:443/iserver/output/SymbolIcon/' 'https://192.168.16.11/server/iserver/output/SymbolIcon/';    
}

代理iServer服务之负载IP显示

nginx代理iServer服务进行多节点负载时,前端调试过程中需要观察具体是哪个节点响应了请求,可在nginx中做如下配置

		location /iserver/{
			proxy_pass  http://iserver;
			proxy_ssl_session_reuse 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_set_header   X-Forwarded-Proto $https;
	        proxy_connect_timeout      5s;
			proxy_send_timeout         5s;
      		proxy_read_timeout         5s;
			client_max_body_size   100m;
			proxy_redirect default;
			# 显示具体负载的机器的ip,X-Route-Ip随便命名
			add_header X-Route-Ip $upstream_addr;
			add_header X-Route-Status $upstream_status;			
		}

代理iServer至OGC服务,替换xml内容失败

nginx代理iServer发布的OGC服务时,会涉及到替换xml中的内容问题,xml是压缩过的,参考上面步骤开启压缩及替换规则后,仍发现有替换失败现象发生(随机失败)

开启解压缩:gunzip on;
禁用压缩:gzip_disable ".";

		location /mapservices/{
			proxy_pass   http://jetty;
			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_set_header X-Forwarded-Proto  $scheme;
			proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
			proxy_max_temp_file_size 0;
			proxy_connect_timeout      3;
			proxy_send_timeout         3;
			proxy_read_timeout         3;
			proxy_buffer_size          128k;
			proxy_buffers              2 256k;
			proxy_busy_buffers_size    256k;
            index  index.html index.htm;
			#服务过滤配置,gzip压缩格式支持
			#proxy_set_header Accept-Encoding deflate;
			gunzip on;
			gzip_disable ".";
			#服务过滤配置
			sub_filter_once off;
			sub_filter_types *;			
			sub_filter 'http://127.0.0.1/iserver' 'http://127.0.0.1/mapservices/iserver';	
		}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值