GatewayWorker Register被不明来源访问,不知道secretKey是否配置正确

diyya

提示符:

源码:
$registerIp = '127.0.0.1';
$registerPort = '6006';
$secretKey = '6006RegisterPass';

    //注册Serve,只能一个
    $r = new Register("text://0.0.0.0:$registerPort");
    $r->name = '6006Register';
    $r->secretKey = $secretKey;//秘钥

    //调度计算Serve:可以分布式,添加多个服务器运行BusinessWorker分摊计算量
    $b = new BusinessWorker();
    $b->registerAddress = "$registerIp:$registerPort";
    $b->secretKey = $secretKey;//秘钥
    $b->eventHandler = 'app\BusinessWebSocket';
    $b->name = '6006BusinessWorker';
    $b->count = 4;

    //网络IoServe:可以分布式,添加多台服务器
    $g = new Gateway("websocket://0.0.0.0:6007");//页面端访问
    $g->registerAddress = "$registerIp:$registerPort";
    $g->name = '6006Gateway';
    $g->secretKey = $secretKey;//秘钥
    $g->startPort = 2900;//内部通讯起始端口,每个 gateway 实例应该都不同,步长1000
    $g->count = 4;
    $g->pingInterval = 10;// 心跳间隔
    $g->pingData = '{"type":"ping"}';// 心跳数据
    $g->lanIp = $registerIp;//本机ip,如果是分布式部署,需要设置成本机 IP

    //phpCli,允许多ip, 使用GatewayWorker\Lib\Gateway控制GatewayWorker\Gateway
    PhpCli::$registerAddress = "$registerIp:$registerPort";
    PhpCli::$secretKey = $secretKey;//秘钥
阅读 128
1个回答

walkor

因为你的register监听的是0.0.0.0,所以能被外网访问,改成127.0.0.1或者内网ip就好了。

如果你没使用gatewayClient ,没有分布式部署,register监听127.0.0.1就好了。

$r = new Register("text://127.0.0.1:$registerPort");

如果你使用了gatewayClient,使用gatewayClient的服务器与gatewayWorker服务器在一个局域网,register监听本机内网ip。

如果你使用了分布式,gatewayWorker都在一个局域网,regsiter监听改为监听本机内网ip。

如果gatewayClient和gatewayWorker不在一个局域网,或者分布式部署不在一个局域网,那么只能用外网ip,设置好secretKey,忽略那些请求探测就好了。

  • diyya 2021-11-24

    感谢作者答复。register是0.0.0.0情况下,请问,secretKey是否配置对吗?也就是截图里的不明来源属于被Register拒绝了吗

  • walkor 2021-11-24

    拒绝了