websocketの機能をAPACHEと連携しているIISのサイトに実装したいと考えています。
websocketの機能の実装、IIS上で動くことの確認まではできましたが、APACHEとの連携の際にエラーになってしまうので解決のためアドバイスをもらいたいです。
現在、ASP.NET MVCで開発したサイトをIIS8でhttpでアクセスできる状態にしており、APACHEへのhttpsのリクエストをそのサイトに転送するようにしています。
APACHE https://server/xxx
↓
IIS http://server/xxx
APACHEのhttpd.confには以下のようにプロキシの設定をしてあります。
<location /xxx> ProxyPass http://server/xxx ProxyPassReverse http://server/xxx ProxyPreserveHost On </location>
この状態で、https://server/xxxにアクセスがあった場合は正常にhttp://server/xxxのサイトが呼び出されていました。
このサイトにWEBSOCKETを実装したので、APACHEのwss://server/wsへアクセスがあったらws://server/xxxが呼び出されるようにしたいと思い、上記のプロキシの設定のすぐ下に以下を追記しました。
<location /ws> ProxyPass ws://server/xxx ProxyPassReverse ws://server/xxx ProxyPreserveHost On </location>
実際にWEBSOCKETで通信を行う処理
$(document).ready(function () { var nickname = prompt('What is your nickname ?'); var url = ''; var route = '@Url.Content("~")'; if (location.protocol == 'http:') { url = "ws://" + location.host + route; } else if (location.protocol == 'https:'){ url = "wss://" + location.host + '/ws/'; } url += "Handler1.ashx?nickname=" + nickname; alert(url); websocket = new WebSocket(url); websocket.onerror = function (evt) { alert('errored : ' + evt.data); }; websocket.onopen = function (evt) { alert('opened'); }; websocket.onclose = function (evt) { alert('closed'); }; websocket.onmessage = function (evt) { var res = JSON.parse(evt.data); alert(res.nickname + ' bets ' + res.bets + '$ to ' + res.target + '.'); }; $('#sendbutton').click(function () { var obj = new Object(); obj.target = $('#target').val(); obj.bets = $('#bets').val(); websocket.send(JSON.stringify(obj)); }); });
しかし、実際にサイトを動かしてテストすると、WEBSOCKETのコネクションを開く処理のところでAPACHEで下記のエラーが発生します。
AH01144: No protocol handler was valid for the URL /ws/Handler1.ashx (scheme 'ws'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
httpd.confで読み込んでいるモジュールは以下の通りですが、何か足りないのでしょうか。
LoadModule access_compat_module modules/mod_access_compat.so LoadModule alias_module modules/mod_alias.so LoadModule allowmethods_module modules/mod_allowmethods.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule dir_module modules/mod_dir.so LoadModule env_module modules/mod_env.so LoadModule headers_module modules/mod_headers.so LoadModule log_config_module modules/mod_log_config.so LoadModule mime_module modules/mod_mime.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule reqtimeout_module modules/mod_reqtimeout.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so LoadModule log_rotate_module modules/mod_log_rotate.so LoadModule log_rotate_module modules/mod_proxy_wstunnel.so
試しにIISでhttpで動かしてみると問題なく動きました。
wws://のアクセスをうまく転送できていないのだと思うのですが...

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/04/18 00:48