私はPlayフレームワークアプリケーションを実行しています。このフレームワークアプリケーションでは、1つのjavascriptがサーバー上のwebsocketに接続する必要があります。 サーバーは、以下の設定で、Playアプリケーションの前でSSLを持つnginxのプロキシを実行している:プロキシサーバーをnginx経由でPlayサーバーにセキュアにします
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=one:10m max_size=500m;
proxy_cache_methods GET HEAD;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;
proxy_http_version 1.1;
upstream backend {
server 127.0.0.1:9001;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
server_name www.studiecirkel.net;
gzip off;
ssl_certificate /home/sfr/certs/ssl-bundle.crt;
ssl_certificate_key /home/sfr/certs/server.key;
ssl_session_timeout 5m;
ssl_ciphers EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;
location/{
proxy_pass https://backend;
auth_basic "Internt alpha-test";
auth_basic_user_file /home/sfr/studiecirkel/.htpasswd;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
tcp_nodelay on;
}
}
ジャバスクリプトは次のようになります。
var chatSocket = new WS("@routes.HomeController.connectChat().webSocketURL(request)");
そしてconnectChat方法は、次のようになります:
public LegacyWebSocket<JsonNode> connectChat() {
return new LegacyWebSocket<JsonNode>() {
public void onReady(WebSocket.In<JsonNode> in, WebSocket.Out<JsonNode> out){
// Some internal code here
}
};
}
これは、すべてがローカルホスト上にあったときにうまくいきましたが、クラウドにサーバーがあるため、Chroで次のエラーが表示されます。 mium:へ
のWebSocket接続 'WSS://バックエンド/メッセージ/ソケット/' に失敗しました:接続確立でエラーが発生します。net :: ERR_NAME_NOT_RESOLVED
私もからproxy_passディレクティブアドレスを切り替え試してみました
バックエンドを127.0.0.1:9001に変更し、代わりにERR_CONNECTION_REFUSEDを取得します。
"proxy_pass http://backend"を使用して、プロキシの背後で非SSLに切り替えると、ブラウザはwebsocket接続が安全でないため接続できないと表示します。
ここで間違っていますか? WebソケットはプロキシされたURLに直接接続できる必要がありますか? SSL対応のWebソケットはこのように動作しませんか?
「wss://mydomain.com/messages/socket/」を追加する必要がありましたが、それはうまくいきました。 – DeveloperInResidence
ホスト/ドメインをハードコードしないでください。 document.windowからホストを派生させる私の更新された答えを見てください –