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つのサーバー内で異なるポートを持つ複数のアプリケーションを展開することが可能です。