1

我有一个 node.js socket.io 服务器应用程序,我刚刚在 Windows Server 2012 的 IIS 8.5 中移动到 IISNode。它设置为使用 https。

当我在本地浏览时一切正常,但是当我尝试使用完整域名访问它时,当我尝试打开 Web 套接字连接时出现错误 403(禁止)。

与 Dante Devine Comedy socket.io 示例一样,我的实际应用程序也会出现同样的问题。Tomasz Janczuk iisnode Dante 示例

浏览时的标准样品

https://localhost/dante/server-socketio.js

或与

https://interfaces.xxxxxx.co.uk/enable/testing/dante/server-socketio.js

在同一台服务器上本地打开 socket.io Web 套接字连接

var client = io.connect('https://localhost', { resource: 'dante/socket.io' });

并正常工作产生以下网络捕获:

工作网络捕获

显然以上在外部访问(不是本地主机)时不起作用,所以我将网络套接字连接更改为

var client = io.connect('https://interfaces.xxxxxx.co.uk/enable/testing', 
              { resource: 'dante/socket.io' });

这失败并出现错误 403,如下所示:

在此处输入图像描述

我的 web.config 与 Dante 示例提供的相同,包含:

<handlers>
  <add name="iisnode-socketio" path="server-socketio.js" verb="*" modules="iisnode" />
</handlers>

<rewrite>
     <rules>
          <rule name="LogFile" patternSyntax="ECMAScript">
               <match url="socket.io"/>
               <action type="Rewrite" url="server-socketio.js"/>
          </rule>
     </rules>
</rewrite>    

<webSocket enabled="false" />

我是 node.js、socket.io 和 iisnode 的新手,对 IIS 有点陌生,所以这可能是一个简单的 iis/网站/https 问题,与 iisnode 无关。

如果有人有任何建议,我将不胜感激。

约翰。


按照 CuriousGuy 的建议,我现在得到以下网络捕获,表明切换到 Web 套接字协议尚未发生。显示的实际错误是

WebSocket connection to 'wss://interfaces.xxxxxx.co.uk/enable/testing/dante/socket.io/1/websocket/ANNcSf7ghQp66nwSS-7P' 
failed: Error during WebSocket handshake: Unexpected response code: 200 

不再给出 403 错误

我尝试从更改服务器 io.set

io.set('resource', '/dante/socket.io');

io.set('resource', '/enable/testing/dante/socket.io');

但这显然是一个错误,因为然后我收到一个错误,即 io 未定义,这似乎有点奇怪。

如果我检查提琴手中的网络流量,我会看到:

提琴手的输出

当我点击最后一个网络线路时,提琴手中的以下错误消息:

iisnode 在处理请求时遇到错误。

HRESULT: 0x6d
HTTP status: 500
HTTP reason: Internal Server Error
You are receiving this HTTP 200 response because
system.webServer/iisnode/@devErrorsEnabled 
configuration setting is 'true'.

服务器 stderr 日志显示:

debug: served static content /socket.io.js
debug: client authorized
info: handshake authorized o7WE52TfMWPxFoJIZFJJ
debug: setting request GET /dante/socket.io/1/websocket/o7WE52TfMWPxFoJIZFJJ
debug: set heartbeat interval for client o7WE52TfMWPxFoJIZFJJ
warn: websocket connection invalid
info: transport end (undefined)
debug: set close timeout for client o7WE52TfMWPxFoJIZFJJ
debug: cleared close timeout for client o7WE52TfMWPxFoJIZFJJ
debug: cleared heartbeat interval for client o7WE52TfMWPxFoJIZFJJ
4

0 回答 0