CentOS 7 における .NET Core 実行環境の構築と Nginx/Supervisor の設定手順

CentOS 7.6環境において、.NET Coreアプリケーションを公開するためのWebサーバー設定およびプロセス管理の手法について解説します。ここでは、バックエンドAPIへのリバースプロキシとしてのNginx設定と、フロントエンドSPA(Single Page Application)の静的配信設定、そしてアプリケーションの常駐化を担うSupervisorの構築手順を中心に説明します。

バックエンドAPI用Nginx設定

まず、外部からのAPIリクエストを受け付け、Kestrelサーバーへ転送するリバースプロキシの設定を行います。以下の設定例では、ドメイン backend-api.example.local へのアクセスをポート80で待ち受け、ローカルホストのポート5050で稼働している.NET Coreアプリケーションへ転送します。

server {
    listen       80;
    server_name  backend-api.example.local;

    location / {
        proxy_pass         http://127.0.0.1:5050;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    access_log  /var/log/nginx/backend_access.log;
    error_log   /var/log/nginx/backend_error.log;
}

この設定により、HTTPリクエストのヘッダー情報が適切にバックエンドへ引き継がれ、WebSocket接続なども考慮された通信が可能となります。

フロントエンド静的ファイル用Nginx設定

次に、AngularなどのJavaScriptフレームワークで構築されたSPAを配信するための設定です。リバースプロキシではなく、ファイルシステム上の静的リソースを直接配信する構成とします。F5リロード時などでもルーティングが正常に動作するよう、try_filesディレクティブを用いて存在しないパスへのアクセスを index.html にフォールバックさせます。

server {
    listen       80;
    server_name  spa.example.local;
    root         /var/www/spa-dist;
    index        index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    access_log  /var/log/nginx/spa_access.log;
    error_log   /var/log/nginx/spa_error.log;
}

ここでは、ビルド済みの静的ファイルが /var/www/spa-dist ディレクトリに配置されていることを前提としています。

Supervisorによるプロセス管理

最後に、.NET Coreアプリケーションがデーモンとしてバックグラウンドで安定稼働し、サーバー再起動時などに自動的に起動するようSupervisorを設定します。以下の設定ファイル例では、ポート6000で待ち受けるWebアプリケーション MyApp.Service.dll を管理します。

[program:core-web-service]
command=/usr/bin/dotnet /opt/apps/MyApp.Service/MyApp.Service.dll --urls http://*:6000
directory=/opt/apps/MyApp.Service
environment=ASPNETCORE__ENVIRONMENT="Production"
user=nginx
stopsignal=INT
autostart=true
autorestart=true
startsecs=10
stderr_logfile=/var/log/supervisor/service.err.log
stdout_logfile=/var/log/supervisor/service.out.log

この設定により、プロセスが異常終了した場合の自動再起動や、標準出力・標準エラーのログ出力先が確保されます。また、server.urls または urls 引数を指定することで、1つのサーバー内で異なるポートを持つ複数のアプリケーションを展開することが可能です。

7月31日 18:32 投稿