本番環境で、ASP.NET Core Web APIを公開するにあたり、調べたことをまとめました。
構成
ASP.NET Core Web APIを本番環境で運用するにあたり、Webサーバとして有名なApacheをリバースプロキシとして使います。クライアントからのHTTPリクエストは、リバースプロキシを経由して、ASP.NET Core Web APIに到達します。
Apache:リバースプロキシの設定
Apacheの設定ファイル(/etc/apache2/sites-available/test.conf)に、リバースプロキシの設定を行います。クライアントからのHTTPリクエストが、localhostのASP.NET Core Web APIに転送されます。
<VirtualHost *:80>
RequestHeader set "X-Forwarded-Proto" "http"
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ServerName test.com
ErrorLog ${APACHE_LOG_DIR}/helloapp-error.log
CustomLog ${APACHE_LOG_DIR}/helloapp-access.log common
</VirtualHost>
クライアントとリバースプロキシ(Apache)間の通信プロトコル「http」を、ヘッダーに追加する設定(X-Forwarded-Proto)をしています。こうすることで、リバースプロキシへのアクセスに使われたプロトコルをASP側で知ることができます。
また、デフォルトでは「ProxyAddHeaders On」となっているため、以下の項目もヘッダーに追加されます。
- X-Forwarded-For:クライアントのIPアドレス
- X-Forwarded-Host
- X-Forwarded-Server
設定変更を反映させるために、Apacheの再起動を行います。
systemctl restart apache2
動作確認
JSONデータの取得
PostmanというAPIのテストツールを使って、GETリクエストを出します。
JSONデータが返されたことを確認できます。
パケットキャプチャ
その時にやりとりされるパケットを取得してみます。
以下のコマンドを打てば、キャプチャ結果をファイルに保存できます。
tcpdump -i any -w test.cap
取得したファイルを、ネットワークプロトコルアナライザ「Wireshark」で解析してみます。
主に、以下のことが確認できます。
- HTTP通信の前に、3ウェイハンドシェイクでTCPコネクションを確立している。
- リバースプロキシとASP間で、HTTPヘッダーに「X-Forwarded-For」などが追加されている。
- クライアント→リバースプロキシ→ASPの順に、パケットが流れている。
まとめ
本番環境で、ASP.NET Core Web APIを公開するにあたり必要となるリバースプロキシの設定をまとめました。また、動作確認では、APIにアクセスしたときの通信をWiresharkを使って確認しました。
コメント