关于workmanchat前端使用nginx做转发导致的跨域问题

1271281914

在nginx中使用chat.room.com:8020转发到端口7272的时候,有些浏览器会出现以下问题,导致无法建立websocket链接,错误提示如下:

** policy file: xmlsocket://chat.room.com:843

cannot connect to Web Socket server at ws://chat.room.com:8020 (SecurityError: Error #2048)

make sure the server is running and Flash socket policy file is correctly placed**

这个问题应该怎么解决?

8873 6 0
6个回答

walkor

要在843端口放置一个policy file文件,这个是flash的安全机制。具体可以网上搜索下

  • 暂无评论
1271281914

这个监听843端口是用nginx来监听还是用workman来做监听?

这个policy file是不是下面这个?
crossdomain.xml

<?xml version="1.0" ?>
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all"/>
    <allow-access-from domain="_" to-ports="_" secure="false"/>
    <allow-http-request-headers-from domain="_" headers="_"/>
</cross-domain-policy>
  • 暂无评论
walkor

用workerman提供即可,就下面几行代码

<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';

$flash_policy = new Worker('tcp://0.0.0.0:843');
$flash_policy->onMessage = function($connection, $message)
{
        $connection->send('<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="_" to-ports="_"/></cross-domain-policy>'."\0");
};

if(!defined('GLOBAL_START'))
{
        Worker::runAll();
}
  • 暂无评论
1271281914

还是出现获取不到的错误,错误如下图

[attach]218[/attach]

[attach]219[/attach]
[attach]220[/attach]

  • 暂无评论
1271281914

搞定了。那个发送还要加一句结束符。

$connection->send("\0");

  • 暂无评论
walkor

好的,谢谢提醒

  • 暂无评论
年代过于久远,无法发表回答
🔝