服务代理与 Nginx 反向代理配合使用 |
首先,您需要进行 SuperMap iPortal 的注册服务代理配置,具体配置信息请参见:注册服务代理配置。
接下来需要对 Nginx 反向代理服务器进行配置。
start nginx
退出 nginx 命令如下:
nginx –s quit
打开【nginx 安装路径】\conf\nginx.conf 文件,修改 http 节点下的 server 节点内容如下:
server {
listen 80;
server_name www.myiportal.com;
location /{
proxy_pass http://192.168.120.52:8090/;
#proxy_set_header Host $host:80;
proxy_set_header ProxyHost $host:80;
}
location ~*/iserver/services/ {
proxy_pass http://192.168.120.52:8095;
#proxy_set_header Host $host:80;
proxy_set_header ProxyHost $host:80;
}
保存上述修改,重启 nginx 使其生效。重启命令如下所示:
nginx -s reload
如果需要配置多 iPortal 的反向代理,您可以通过在 nginx.conf 中配置多个 server 节点实现。
如果需要匹配多个服务地址,您可以通过在 nginx.conf 中配置多个 location 实现。
要实现注册服务代理后的服务地址也被反向代理,同时隐藏代理服务端口,还需对 iportal.xml 文件进行配置,位于【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF)文件夹下。在 iportal.xml 配置文件中的<serviceProxy>节点下增加<proxyServerRootUrl>节点,设置反向代理服务的根地址。由于代理服务地址中 Host 主机有两种显示方式:域名或 IP,因此,<proxyServerRootUrl>节点有两种配置方式:
方式一:域名形式
<serviceProxy>
<enable>true</enable>
<port>8095</port>
<proxyServerRootUrl>http://www.myiportal.com[:port]</proxyServerRootUrl>
<httpConnPoolInfo>
<maxTotal>20</maxTotal>
<defaultMaxPerRoute>2</defaultMaxPerRoute>
</httpConnPoolInfo>
</serviceProxy>
方式二:IP 形式,此配置会使代理服务地址根据用户当前的网络环境,动态显示 ip 地址。
<serviceProxy>
<enable>true</enable>
<port>8095</port>
<proxyServerRootUrl>http://{ProxyHost}[:port]</proxyServerRootUrl>
<httpConnPoolInfo>
<maxTotal>20</maxTotal>
<defaultMaxPerRoute>2</defaultMaxPerRoute>
</httpConnPoolInfo>
</serviceProxy>
配置完成后,重启 iPortal 服务。
注意:以上两种配置方式中,[:port]变量表示端口,填写代理后的服务监听端口即可,可以为空,为空默认为80端口。
你可以通过访问反向代理后的服务地址,例如:http://192.168.120.40,其中,默认的80端口可以隐藏,即可获得与访问原服务器相同的内容。注册服务代理后的服务根地址也将变成:http://192.168.120.40,从而也隐藏了服务代理端口“8095”。
在实际的业务应用中,如果您想使用域名访问 iPortal 门户和服务,那么您需要将 Nginx 反向代理服务器的 ip 绑定为域名,然后通过该域名访问反向代理后的服务,即 http://www.myiportal.com,同时,注册服务代理后的服务根地址也将变成:http://www.myiportal.com。