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を入力してしまう。
コメント
コメントを投稿