リバースプロキシーをAzureで実装するには？

# 目次<!-- omit from toc -->

1. [目的](#目的)
2. [対象](#対象)
3. [概要](#概要)
4. [調査対象にするリバースプロキシーの機能](#調査対象にするリバースプロキシーの機能)
   1. [複数ドメインのホスティング](#複数ドメインのホスティング)
   2. [負荷分散](#負荷分散)
   3. [広域負荷分散](#広域負荷分散)
      1. [広域負荷分散(リージョン内)](#広域負荷分散リージョン内)
      2. [広域負荷分散(リージョン間)](#広域負荷分散リージョン間)
   4. [キャッシュ/CDN](#キャッシュcdn)
   5. [SSL終端](#ssl終端)
5. [早見表](#早見表)
6. [まとめ](#まとめ)
7. [参照](#参照)

# 目的

私個人の解釈で、リバースプロキシーをとらえたときにどのようなクラウドサービスのPaaSを利用できるかざっくり把握することを目指していきます。今回はAzureにフォーカスします。

# 対象

- nginxでの実装内容をAzureのPaaSで置き換える際のサービス・機能を調査している方

# 概要

`nginx`で実装可能な範疇で、リバースプロキシーの機能をAzureのPaaS群から調査していきます。

# 調査対象にするリバースプロキシーの機能

- 下記のリバースプロキシーの機能について調査します。
  - 複数ドメインのホスティング
  - 負荷分散
  - 広域負荷分散
  - キャッシュ/CDN
  - SSL終端

## 複数ドメインのホスティング

![AzureReverseProxy-複数サイトホスティング.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536077/302eae51-3d41-3c1f-24cd-4f9698d69544.png)

例えば、`https://a.com`と`https://b.com`の2つ以上のドメイン(FQDN)で指定のサーバーにフォワーディングするような機能を指します。

## 負荷分散

![AzureReverseProxy-負荷分散.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536077/af1061b2-4dcb-ef39-6479-df8a4b9f31bc.png)

複数サーバーをしていすることでサーバーの負荷を分散させる機能のことを指します

## 広域負荷分散

![AzureReverseProxy-広域負荷分散.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536077/100e6a7f-9d0e-38bd-e733-9e83fe7ad60e.png)

### 広域負荷分散(リージョン内)

リージョン内のデータセンターを跨いだ負荷分散機能のことを指します。

### 広域負荷分散(リージョン間)

異なるリージョンに属するデータセンターを跨いだ負荷分散機能のことを指します。

## キャッシュ/CDN

![AzureReverseProxy-キャッシュ.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536077/943411e1-d53b-3dfc-d903-4b634f45edd9.png)

同一内容のリクエストが来た場合、リバースプロキシーで保持している画像ファイルやデータを返答する機能のことを指します。

## SSL終端

![AzureReverseProxy-SSL終端.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536077/12d7569b-7348-5774-a376-292e5aefa0b7.png)

SSL/TLSでの暗号化通信(HTTPS)をリバースプロキシーでDecrypt/Encryptする機能のことを指します。

# 早見表

| リバースプロキシー機能分類/サービス名 | Nginx | Azure Load Balancer | Application Gateway | Front Door | Traffic Manager |
| :-----------------------------------: | :---: | :-----------------: | :-----------------: | :--------: | :-------------: |
|      複数ドメインのホスティング       |   ◯   |          ×          |          ◯          |     ◯      |        ◯        |
|               負荷分散                |   ◯   |          ◯(L4)          |          ◯(L7)          |     ◯(L7)      |        ◯(L4)        |
|             広域負荷分散(リージョン内)              |   △   |          ◯          |          ◯          |     ◯      |        ◯        |
|             広域負荷分散(リージョン間)              |   △   |          ◯          |          ×          |     ◯      |        ◯        |
|            キャッシュ/CDN             |   ◯   |          ×          |          ×          |     ◯      |        ×        |
|                SSL終端                |   ◯   |          ×          |          ◯          |     ◯      |        ×        |

- 注意点
  - Front Door と Traffic Manager はインターネットからのアクセスでの利用が前提でのPaaSになります。閉域での利用を想定する場合は選定できません。

# まとめ

今回、リバースプロキシーをAzureのPaaSサービスで実装する場合、どのサービスをつかえばよいか？という観点で調査をしてみました。リバースプロキシーの延長線上としてマイクロサービスアーキテクチャの実装まで検討する場合には、ServiceFabricというPaaSも用意されていて充実していました。ServiceFabricはVM・コンテナなどの管理も含まれているため今回は検討対象外としました。

# 参照

- [Nginx Docs](https://docs.nginx.com/)
- MS Doc
  - [Azure Load Balancer](https://learn.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview)
  - [Azure Application Gateway](https://learn.microsoft.com/ja-jp/azure/application-gateway/overview)
  - [Front Door](https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-overview)
  - [Traffic Manager](https://learn.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-overview)