soap服务使用nginx做 负载均 衡注意事项

2018-07-02  本文已影响0人  夜月行者

介绍

在使用服务发布的时候,对soap服务进行配置的时候进行nginx进行代理的时候需要注意一些事项
这一部分是搭建完soap 服务后使用nginx进行负载均衡的时候遇到的一些问题。

1. server端发布url的时候应该使用哪个url

最开始我认为server端发布url的时候应该就是本机的ip,这样外部同样用这个ip访问。
刚开始是这样配置的

@Configuration
public class WebserviceConfig {

    @Value("${wsdl.uri}")
    String uri;

    @Autowired
    SearchSoapServerService mySoapServerTest;

    @Bean
    public Endpoint createEndPoint() {
      return   Endpoint.publish(uri, mySoapServerTest);
    }
}

对应的 wsdl.uri的值是

wsdl.uri=http://192.168.1.15:8786/services/policeGkService

访问wsdl的时候也是

http://192.168.1.15:8786/services/policeGkService?wsdl

这个是我在测试环境的时候部署的方式,等我到生产希望部署集群的方式的时候就傻眼了,各个机器的ip是不一样的,怎么办呢,上网查了一下,才明白过来,这个地址实际上就是配置该服务可以接收哪些的ip访问,所以明显配置0.0.0.0是更合适的方式。

更正后的uri配置

wsdl.uri=http://0.0.0.0:8786/services/policeGkService

2. wsdl中 service.port.address 的location元素的生成规则

通过测试发现 对应location的生成规则 和你访问 wsdl的时候使用的 http header中 host有关系
比如使用localhost

览器输入  http://localhost:8786/services/policeGkService?wsdl
对应的http head 中的 Host属性是
Host: localhost:8786  

返回的wsdl对应的location是
<soap:address location="http://localhost:8786/services/policeGkService"/>

如果使用 127.0.0.1


浏览器输入   http://127.0.0.1:8786/services/policeGkService?wsdl
对应的 http head 中的 Host 属性是
Host: 127.0.0.1:8786

返回的wsdl对应的location是
<soap:address location="http://127.0.0.1:8786/services/policeGkService"/>

所以返回的location地址是和你请求的时候使用的ip是有关系的。

3. nginx中配置注意事项

那么nginx当中应该怎么配置呢
从2中得知,返回的location地址是和你请求的时候使用的ip是有关系的。
所以在nginx中进行反向代理的时候记得把 Host 修改 为nginx的 ip:port 即可。

具体配置对应

upstream monitor_soap_servers{
     server 100.09.91.159:8786;
     server 100.09.168.68:8786;
     server 100.09.178.20:8786;
}
server {
    listen 80;
    server_name  100.09.129.131;

    #### nginx_proxy session共享:
    ssl_session_timeout         1d;
    ssl_session_cache           shared:SSL:50m;

    resolver                    8.8.4.4 8.8.8.8 valid=300s;
    resolver_timeout            10s;

    location / {
        access_log /data/nginx/log/third_search.kkmh.com.log api;
      # 这个地方的配置十分重要,必须这样配置才可以返回正确的wsdl文档
        proxy_set_header Host $host:$server_port;
        proxy_pass http://monitor_soap_servers/;
    }
}

在这种配置情况下
访问 wsdl文档使用的路径是

http://100.09.129.131/services/policeGkService?wsdl

返回的location是nginx对应的地址,这样的话就真正实现了负载均衡

<service name="SearchSoapServerServiceService">
    <port name="SearchSoapServerServicePort" binding="tns:SearchSoapServerServicePortBinding">
        <soap:address location="http://100.09.129.131:80/services/policeGkService"/>
    </port>
</service>
上一篇下一篇

猜你喜欢

热点阅读