blazor serverside apache httpdメモ

まぁ、当たり前の話だが、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の箇所は少々、自信無し・・・
後で別のサービスを追加して確認してみよう・・・

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: asp.net core, Blazor, dotnetcore, 技術系 パーマリンク

blazor serverside apache httpdメモ への6件のフィードバック

  1. takezou のコメント:

    別のサブディレクトリとして、サービスを追加し、Proxy設定とWebSocket用のRewriteルールを追加して試したところ、両方のblazorアプリがうまく動作していることを確認した。
    でも、WebSocketの方のパターンマッチングちょっと自信ないんんだよね。

    • かば のコメント:

      2つのプロジェクトを同サーバ内でそれぞれのサブディレクトリで稼働させたく、参考にさせて頂きました。
      一応できたようにみえたのですが、例えばChromeブラウザでAを開き(正常にwsも接続)、SafariでBを開くとそれぞれ別に動作します。
      しかし、Chromeでタブをわけて別々のURLにアクセルすると、片方の通信が破綻します。
      Chromeでも一度完全終了させてから、開きなおせばどちらも正常に通信できますが、同時に開くとやはり片方の通信とみなされるのか、どちらかのプロジェクトに寄せられてしまいます。
      WebSocket、SignalRの動作上仕方がないのでしょうか。
      なんか方法ないものでしょうか・・・?

      • takezou のコメント:

        何とも言えませんが、同じプロジェクト上の別コンポーネント(URL)であれば、問題無く動作するようです。
        答えにはなっていないと思いますが・・・

        • かば のコメント:

          ご返信ありがとうございます。
          自分のリライトルールの書き方あたりがまずいのかもしれませんね・・・
          > Rewriteルールを追加して試したところ
          こちらの追加したうえでの記載例ご教授いただけるとありがたいですが、時間が経っている記事なので難しいでしょうか。

        • takezou のコメント:

          今ひとつ分からないのですが、どのような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>

  2. かば のコメント:

    ご丁寧にありがとうございます。
    URLの指定としてはtakezouさんのものと同じ考え方です。
    リライトはほぼ同じ書き方をしていましたが、一カ所下のようにしており、違っていました(これが影響しているのかはまだ理解できていません)。
    それと、VirtulHost *:443でリッスンしています。
    RewriteRule /app1/(.*) ws://localhost:5010/app1/$1 [P]
    RewriteRule /app2/(.*) ws://localhost:5020/app2/$1 [P]

    もう少し試行錯誤してみます。
    ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください