我有一个 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
我尝试从更改服务器 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