Windows Server 2012 の IIS 8.5 の IISNode に移動したばかりの node.js socket.io サーバー アプリケーションがあります。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' });
正しく動作し、次のネットワーク キャプチャを生成します。
明らかに、外部から (localhost ではなく) アクセスした場合、上記は機能しないため、Web ソケット接続を次のように変更します。
var client = io.connect('https://interfaces.xxxxxx.co.uk/enable/testing',
{ resource: 'dante/socket.io' });
これは次のようにエラー 403 で失敗します。
my 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 / Webサイト/ 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