Spring Cloud Gateway+Consul对Netty Socket IO+SSL负载均衡

2 篇文章 0 订阅

Spring Cloud Gateway+Consul对Netty Socket IO+SSL负载均衡

问题

项目当中用到了WebRTC,这玩意调用摄像头必须是在https情况下,然后就直接把前端的服务器nginx弄了个ssl证书,结果项目在建立NettySocket连接的时候使用的是http协议被浏览器阻止了,所以只能把NettySocketIO服务也升级成SSL。这样的结果就是nginx,gateway,netty socket三个服务都要变成https。

Netty Socket IO

  1. netty socket io设置ssl还是比较简单的
public SocketIOServer socketIoServer() {
        Configuration config = new Configuration();
        //单次发送数据最大值1M
        config.setMaxHttpContentLength(1024 * 1024);
        config.setBossThreads(1);
        config.setWorkerThreads(100);
        config.setAuthorizationListener(handshakeData -> true);
        config.setHostname(address);
        config.setPort(port);

        config.setKeyStorePassword("证书密码");
        InputStream stream = this.getClass().getResourceAsStream("Resource目录下的证书");
        config.setKeyStore(stream);

        return new SocketIOServer(config);
    }

证书去阿里云腾讯云什么的申请,都是免费的。需要注意的是证书路径写错了启动是不会报错的,只会按照没有设置ssl来启动。可以在SocketIOChannelInitializer这个类上打上断点看下
在这里插入图片描述
2. netty socket io注册到consul
netty socket io和spring boot的tomcat是两个不同的服务器(端口号都不相同)。注册到consul中配置要注意一下

spring:
   application:
   	 name: socket
   cloud:
     consul:
       host: consul.nyist.com
       port: 8500
       discovery:
         service-name: ${spring.application.name}
         prefer-ip-address: true
         healthCheckInterval: 5s
         port: 8006 #这个是调用服务时候的端口
         ip-address: www.socket.com #这个地方填域名,使用ip自己试一下会有什么问题
         #健康检查的地址,端口号是tomcat的端口号
         health-check-url: http://${spring.cloud.consul.discovery.ip-address}:${server.port}/actuator/health

Gateway

gateway的ssl也挺简单的,可以去搜一下其他博客
对socket的配置

- id: socket
          #注意这里是https
          uri: lb:https://socket
          predicates:
            - Path=/socket.io/**,
          filters:
            - StripPrefix=0

我这里前端用的是vue-socket.io ,配置需要加上transports: [‘websocket’]
原因是websocket建立连接需要发起多次请求,Gateway会把这个过程的多次请求转发到不同的服务

Vue.use(new VueSocketIO({
    debug: true,
    connection: '',
    vuex: {
        store,
        actionPrefix: 'SOCKET_',
        mutationPrefix: 'SOCKET_'
    },
    options: {path: '', autoConnect: true, transports: ['websocket']}
}))

最后附上nginx的配置

server {
		listen 443 ssl;
		server_name xxxx; 

		ssl_certificate      xxx;  # 这个是证书的crt文件所在目录
		ssl_certificate_key  xxx;  # 这个是证书key文件所在目录

		ssl_session_cache    shared:SSL:1m;
		ssl_session_timeout  5m;

		ssl_ciphers  HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers  on;
 
		location /socket.io/{
            proxy_pass https://gateway.nyist.xyz:8011;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "upgrade";
		}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值