1

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 

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