まぁ、当たり前の話だが、apache上でサーバのサブディレクトリとして、blazor server sideを動作させるには、それ用のサービスと、リバースプロキシ設定が必要。
また、WebSocketのためのリライトルールが必要となる。
以下のような感じ。
http://・・・/blazorappをhttp://localhost:5010/ にマッピングする。
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName ・・・
ProxyPass /blazorapp http://localhost:5010/
ProxyPassReverse /blazorapp http://localhost:5010/
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /blazorapp/(.*) ws://localhost:5010/$1 [P]
</VirtualHost>
※kestrelサービスはlocalhost:5010で口を開けて待っているという想定。(appsettings.jsonにて指定するとかネ。)
[[Service定義ファイル]]
[Unit]
Description=<サービスの説明>
[Service]
WorkingDirectory=/<working directory path>
ExecStart=/usr/bin/dotnet /<dllパス>/<アプリケーション名>.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=<アプリケーション名>
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
[[appsettings.json]]
{
"Kestrel" : {
"EndPoints" : {
"Http" : {
"Url" : "http://localhost:5010"
}
}
},
・・・
}
一応、動作確認済み。でも、Websocketの箇所は少々、自信無し・・・
後で別のサービスを追加して確認してみよう・・・
別のサブディレクトリとして、サービスを追加し、Proxy設定とWebSocket用のRewriteルールを追加して試したところ、両方のblazorアプリがうまく動作していることを確認した。
でも、WebSocketの方のパターンマッチングちょっと自信ないんんだよね。
2つのプロジェクトを同サーバ内でそれぞれのサブディレクトリで稼働させたく、参考にさせて頂きました。
一応できたようにみえたのですが、例えばChromeブラウザでAを開き(正常にwsも接続)、SafariでBを開くとそれぞれ別に動作します。
しかし、Chromeでタブをわけて別々のURLにアクセルすると、片方の通信が破綻します。
Chromeでも一度完全終了させてから、開きなおせばどちらも正常に通信できますが、同時に開くとやはり片方の通信とみなされるのか、どちらかのプロジェクトに寄せられてしまいます。
WebSocket、SignalRの動作上仕方がないのでしょうか。
なんか方法ないものでしょうか・・・?
何とも言えませんが、同じプロジェクト上の別コンポーネント(URL)であれば、問題無く動作するようです。
答えにはなっていないと思いますが・・・
ご返信ありがとうございます。
自分のリライトルールの書き方あたりがまずいのかもしれませんね・・・
> Rewriteルールを追加して試したところ
こちらの追加したうえでの記載例ご教授いただけるとありがたいですが、時間が経っている記事なので難しいでしょうか。
今ひとつ分からないのですが、どのようなURL指定を想定していますでしょうか?
私の試したのは以下のような感じです。
http://server/app1
http://server/app2
設定はこんな感じ
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName ServerName.jp
ProxyPass /app1 http://localhost:5010/app1
ProxyPassReverse /app1 http://localhost:5010/app1
ProxyPass /app2 http://localhost:5020/app2
ProxyPassReverse /app2 http://localhost:5020/app2
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /app1/(.*) ws://localhost:5010/$1 [P]
RewriteRule /app2/(.*) ws://localhost:5020/$1 [P]
</VirtualHost>
ご丁寧にありがとうございます。
URLの指定としてはtakezouさんのものと同じ考え方です。
リライトはほぼ同じ書き方をしていましたが、一カ所下のようにしており、違っていました(これが影響しているのかはまだ理解できていません)。
それと、VirtulHost *:443でリッスンしています。
RewriteRule /app1/(.*) ws://localhost:5010/app1/$1 [P]
RewriteRule /app2/(.*) ws://localhost:5020/app2/$1 [P]
もう少し試行錯誤してみます。
ありがとうございました。