Ubuntu+ASP.NET CoreでWebサービス(3)/Nginxから転送

前回

[バージョン情報]
Ubuntu Server 18.04.1 LTS
.NET Core 2.1
Nginx 1.14.0
Windows10(クライアント)
Visual Studio 2017 Community(開発環境)

みんな知ってるWebシステムの三層構造。前回はkestrelのホストしているURLに直接リクエストを投げたが、区分としてはASPはアプリケーションサーバだろう。なのでその前段階にWebサーバを構築する。

Webサーバには最近のスタンダードらしいNginxを使ってみる。MSの公式でもNginxを使用する方法が書いてある(リンク)ので、よくある構成かと思われる。

Nginxのインストール

Ubuntuの公式リポジトリに含まれているので、apt installだけでダウンロードからインストールまでできてしまう。

$sudo apt install nginx

インストールしたらnginxサービスを起動する。

$sudo systemctl start nginx

コンソールには何も出てこないが、curlやブラウザでアクセスすると「Welcome to nginx!」のHTMLページが返ってくる。

補足:systemctl start nginx の代わりに service nginx start でも起動する。後者はサービスのみに対応したスクリプトコマンドで、実行結果は基本的に同じようだ。ただsystemctlの方が汎用的みたいなのでこちらに慣れておく。

リバースプロキシの設定

Nginxの既定のサイトの構成ファイル[/etc/nginx/sites-available/default]に転送設定を加える。

location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
}
location /api/ {
        proxy_pass         http://localhost:5000;
        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;
}

前述の公式解説ではドメイン以下全てを転送しているが、静的ファイルは普通にNginxが返してくれればいいので、/api/以下のロケーションのみkestrelのホストするアドレスに転送するようにする。

pass以外の部分は転送する時の設定。ヘッダに何を含めるかだのなんだの。まあ必要になった段階で付け足したりすればいいと思う。

ちなみに静的ファイルのルートパスはこの少し上に root の設定がある。

確認

Nginxサービスを起動して、さらに作成したASP.Net CoreのAPIも起動しておく。ホストのWebブラウザからアクセスすると、80番ポートでアクセスしても、api/のロケーションはaspに転送されてた結果が帰ってくるのが確認できる。

以上

実際の運用にはもう少し設定が必要だと思うけど、とりあえずNginxとASP.Net CoreでWeb APIをホストすることができた。

しかし思ったより簡単。インストールはaptがやってくれるし。以前Apacheとjavaでやったときは連携設定とかもっと面倒だった気がするんだけど。とりあえず動かすだけならすぐだね。

余談:Nginxの読み方は「えんじんえっくす」。この読み方を知ってしまうとつい最初にeを入力してしまう。

コメント