微信小游戏配置Nginx,一种不一样的伤

光阴如是,岁月如梭,风水轮流转,由于我国社会主义体特色版号规定,曾几何时伟大的mmo游戏被舍弃,现在开始制作 微信小游戏。

       由于微信小游戏的审查机制,需要做正式服和提审服区分(腾讯严打诱导分享 图片版权问题等)。so ~~ ~~~

     ​  提审版 -----> 提审服 。

       审核通过后 -------> 正式服。

       小游戏前后端通信只能用wss 协议,游戏服务器搭建ws协议支持,后用Nginx 实现wss层:

  • 搭建游戏服务器支持ws:

        笔者服务器使用的netty,需要配置几个Pipeline: HttpServerCodec  ChunkedWriteHandler HttpObjectAggregator WebSocketServerProtocolHandler (这个是真正用于支持ws协议的) ServerHandler(游戏玩法逻辑 自己实现)

​
ServerBootstrap b = new ServerBootstrap();
			b.group(bossGroup, workerGroup)
					.channel(NioServerSocketChannel.class)
					.option(ChannelOption.SO_BACKLOG, 10240)
					.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)		//使用内存池
					.childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)	//使用内存池
					.childOption(ChannelOption.TCP_NODELAY, true)
					.childOption(ChannelOption.SO_KEEPALIVE, true)
					.childHandler(new ChannelInitializer<SocketChannel>(){
						@Override
						public void initChannel(SocketChannel ch) throws Exception {
							
							ChannelPipeline p = ch.pipeline();									
							p.addLast(new HttpServerCodec());
						
						    //ChunkedWriteHandler分块写处理,文件过大会将内存撑爆
						    p.addLast(new ChunkedWriteHandler());
						    p.addLast(new HttpObjectAggregator(64 *1024));		 
						    p.addLast(new WebSocketServerProtocolHandler("/ws"));						  
						    p.addLast(new ServerHandler());
								   
						    
						   }
                   });

​

  


WebSocketServerProtocolHandler("/ws") 中 “/ws” 必写 .客户端访问方式为:

   wss://www.你的域名/ws.com 或  ws://你的ip:端口号/ws

  • 搭建Nginx 支持wss :

    1.正式服服务器:

upstream gameserver{
    server 127.0.0.1:端口号 weight=1;
} 
server {
        listen       443;

        add_header "Access-Control-Allow-Origin" "*";
        server_name www.你的域名.com;
        ssl on;
        ssl_certificate 1_证书.crt;
        ssl_certificate_key 2_证书.key;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;


        location ~/ws {
            valid_referers none blocked server_names ~/wxappid/(0|devtools)/page-frame.html;
            if ($invalid_referer !~ "1") {
                proxy_pass http://测试服:端口号;
                break;
            }
        }

            #limit_req zone=allips burst=5 nodelay;
            #limit_req zone=allips burst=1 nodelay;
            proxy_pass http://gameserver;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr ;
            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }

/wxappid/(0|devtools)/page-frame.html 为区分测试服的正则表达式。invalid_referer 为Nginx防盗链,若网络连接 Referer 来源匹配 server_names 正则表达式 ,其值为 0 ,反之 为 1 , 若 为 1 , 跳转到测试服务器 。

腾讯官方文档:

 

后面  proxy_http_version 1.1 

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "Upgrade"

实现了 wss 中的 “s” 层 ,此处困惑了好久 ,有人说用netty使用Ssl也可以实现s层 ,然并卵 。。。若有童鞋实现了,欢迎指正~~ 。

2.提审服服务器:

upstream gameserver{
    server 127.0.0.1:端口号 weight=1;
}
server
    {
      listen 7775 ssl;
      server_name wwwEx.你的域名.com; #填写绑定证书的域名
      ssl on;
      ssl_certificate /server/nginx/sbin/1_证书.com_bundle.crt;
      ssl_certificate_key /server/nginx/sbin/2_证书.com.key;
      ssl_session_timeout 5m;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
      ssl_prefer_server_ciphers on;

      #微信小游戏
      location ~/ws {

            #limit_req zone=allips burst=5 nodelay;
            #limit_req zone=allips burst=1 nodelay;
            proxy_pass http://gameserver;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr ;
            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
}

 

同样 实现了 wss 中的 “s” 层 ,配置跳转到 gameserver。

总体流程图:

 

 

 

 

    ​ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值