服务代理与 Nginx 反向代理配合使用

发送反馈


在 iPortal 中,您可以将服务代理和反向代理配合使用,为门户和服务的安全提供双重保障。其中,反向代理机制用于保障 iPortal 门户平台的安全,Nginx 代理服务器作为客户端与 iPortal 门户服务器间的屏障,负责接收并转发来自客户端的请求。代理服务器对外表现为一个服务器,客户端不知道内部网络其他服务器的存在,因此对内网服务器可以起到保护作用。iPortal 服务代理机制则提供门户级别的服务访问控制,在原始服务地址和代理服务地址间建立映射,使授权用户只能访问代理服务地址,隐藏原始服务地址,保护您注册服务的安全。

下面将详细介绍如何将服务代理与 Nginx 反向代理配合使用。首先,请确保您的 iPortal 开启了服务代理功能,具体配置信息请参见:服务代理配置

接下来需要对 Nginx 反向代理服务器进行配置。

启动 Nginx

以 Windows 系统为例:

  1. 解压 nginx 到指定目录
  2. 在 nginx 根目录下,通过以下命令启动 nginx:

start nginx

退出 nginx 命令如下:

nginx -s quit

  1. 验证 nginx 正常启动,有以下两种方式:

配置 Nginx

打开【nginx 安装路径】\conf\nginx.conf 文件,修改 http 节点下的 server 节点内容如下:

server {

        listen       80;

        server_name  www.myiportal.com;

        location /{

            proxy_pass   http://192.168.120.52:8190/;

            proxy_set_header Host $host:80;

            proxy_set_header X-Read-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                       }

        location /portalproxy/{

            proxy_pass   http://192.168.120.52:8195;

            proxy_set_header Host $host:80;

            proxy_set_header X-Read-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                       }

           }

保存上述修改,重启 nginx 使其生效。重启命令如下所示:

nginx -s reload

如果需要配置多个 iPortal 的反向代理,或需要同时配置多个 iServer 的反向代理,您可以通过在 nginx.conf 中配置多个 server 节点实现。

注意:如果 Nginx 代理后的 iServer 服务注册到 iPortal 门户中,该服务又经过了 iPortal 的服务代理,为了保证经过两次代理后的 iServer 服务能够正常访问,建议以上 Host 参数设置为:Host $http_host。

如果需要匹配多个服务地址,您可以通过在 nginx.conf 中配置多个 location 实现。

配置 Nginx 允许客户端请求的最大单文件字节数

Nginx 默认允许客户端请求的最大单文件字节数为 1m,如果用户访问经过 Nginx 代理后的 iPortal,上传大的数据文件到门户中,此时 1m是远远不够的,建议修改为 1024m,即允许一次最大上传 1024m 大小的数据文件,您也可以根据具体的业务需求进行配置,具体做法如下:

打开【nginx 安装路径】\conf\nginx.conf 文件,在 http 节点下增加如下一行代码:

client_max_body_size 1024m;

client_max_body_size:表示客户端请求服务器最大允许大小,单位是兆。如果请求的数据量大于 client_max_body_size 中设置的值,HTTP协议会报错413: "Request Entity Too Large",因此当您上传的数据量较大时,需要将参数值改大。

注意:如果在完成以上配置后, iPortal 上传数据量较大的文件时仍卡顿,您需要继续修改 http 节点下 client_max_body_size 和 keepalive_timeout 的内容,设置更大的值,具体请参见:FAQ

配置 iPortal

要实现启用服务代理后的服务地址也被反向代理,同时隐藏代理服务端口,还需对 iportal.xml 文件进行配置,位于【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF 文件夹下。在 iportal.xml 配置文件中的<serviceProxy>节点下增加<proxyServerRootUrl>节点,设置反向代理服务的根地址。由于代理服务地址中 Host 主机有两种显示方式:域名或 IP,因此,<proxyServerRootUrl>节点有两种配置方式:

方式一:域名形式

<serviceProxy>

    <enable>true</enable>  

    <port>8195</port>  

    <proxyServerRootUrl>http://www.myiportal.com[:port]</proxyServerRootUrl>  

    <httpConnPoolInfo>

      <maxTotal>20</maxTotal>  

      <defaultMaxPerRoute>2</defaultMaxPerRoute>

    </httpConnPoolInfo>

  </serviceProxy>

方式二:IP 形式,此配置会使代理服务地址根据用户当前的网络环境,动态显示 ip 地址。

<serviceProxy>

    <enable>true</enable>  

    <port>8195</port>  

    <proxyServerRootUrl>http://{ProxyHost}[:port]</proxyServerRootUrl>  

    <httpConnPoolInfo>

      <maxTotal>20</maxTotal>  

      <defaultMaxPerRoute>2</defaultMaxPerRoute>

    </httpConnPoolInfo>

  </serviceProxy>

配置完成后,重启 iPortal 服务。

注意:以上两种配置方式中,[:port]变量表示端口,填写代理后的服务监听端口即可,可以为空,为空默认为 80 端口。

访问门户和代理服务

在完成以上配置后,您通过访问 Nginx 反向代理服务器的 ip 即可获得与访问原 iPortal 门户相同的内容,例如:http://192.168.120.40:80,其中,默认的 80 端口可以隐藏。启用服务代理后的服务根地址也将变成:http://192.168.120.40:80,从而也隐藏了服务代理端口“8195”。

在实际的业务应用中,如果您想使用域名访问 iPortal 门户和服务,那么您需要将 Nginx 反向代理服务器的 ip 绑定为域名,然后通过该域名访问反向代理后的门户,即 http://www.myiportal.com:80,同时,启用服务代理后的服务根地址也将变成:http://www.myiportal.com:80。