/mysubdir
を使用するパスに対してnode.jsサーバーにのみヒットするプロキシを実行しています。この状況に合わせてsocket.ioを構成するにはどうすればよいですか?
私のクライアントコードで私は試しました:
var socket = io.connect('http://www.example.com/mysubdir');
しかし、基になるsocket.io(またはengine.io)のhttpリクエストがヒットしていることに気付きました
http://www.example.com/socket.io/?EIO=3&transport=polling&t=1410972713498-72`
叩いて欲しい
http://www.example.com/mysubdir/socket.io.....
クライアントとサーバーで構成する必要があるものはありますか?
私のサーバーでは私はしなければなりませんでした
var io = require('socket.io')(httpServer, {path: '/mysubdir/socket.io'})`
私のクライアントでは私はしなければなりませんでした
<script src="http://www.example.com/mysubdir/socket.io/socket.io.js"></script>
そしてまた
var socket = io.connect('http://www.example.com', {path: "/mysubdir/socket.io"});`
私の場合、リバースプロキシとしてnginxを使用しています。ポーリング時に404エラーが発生していました。これが私にとっての解決策でした。
ノードサーバーへのURLは https://example.com/subdir/
App.jsで、ioサーバーをインスタンス化しました。
var io = require('socket.io')(http, {path: '/subdir/socket.io'});
私が使用したhtmlで
socket = io.connect('https://example.com/subdir/', {
path: "/subdir"
});
乾杯、
ルーク。
@ Drew-LeSueur による答えは、socket.io> = 1.0に対して正しいです。
Socket.io 0.9を使用していたので、ドキュメントに 古い方法 が見つかりました。
// in 0.9
var socket = io.connect('localhost:3000', {
'resource': 'path/to/socket.io';
});
// in 1.0
var socket = io.connect('localhost:3000', {
'path': '/path/to/socket.io';
});
/
が新しいpath
オプションの最初の文字として表示されることに注意してください。
Nginxを使用すると、これは、socket.ioサーバーアプリで何も変更する必要のないソリューションです。
Nginx confで:
location /mysubdir {
rewrite ^/mysubdir/(.*) /socket.io/$1 break;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $Host;
proxy_pass http://127.0.1.1:3000;
}
サーバー内:
var io = require('socket.io')(3000)
クライアントの場合:
var socket = io.connect('https://example.com/', {
path: "/mysubdir"
})