#
ドキュメント

Document

自分のための備忘録です。

Nginxをリバースプロキシサーバとして使用

内容

EC2インスタンスに2つのサービスを稼働する。

  1. 8000:80で稼働しているhttpdコンテナ
  2. 8001:80で稼働しているnginxコンテナ

Nginxをプロキシサーバとして以下のように転送する。

  • /fooのときはhttpdコンテナに転送
  • /barのときはnginxコンテナに転送

Webサーバを稼働

httpdコンテナをポート8000番で稼働する。

$ sudo docker run -itd -p '8000:80' httpd:latest

nginxコンテナをポート8001番で稼働する。

$ sudo docker run -itd -p '8001:80' nginx:latest

リバースプロキシサーバを稼働

$ sudo docker run -itd -p '80:80' --name proxy nginx

リバースプロキシサーバ用Nginxの設定ファイル

Dockerfile

FROM nginx:1.19

# @see https://qiita.com/shin-go/items/6cb4824944ddffb6e6a7
COPY ./default.conf /etc/nginx/templates/default.conf.template

etc/nginx/templates/default.conf.templateについては以下を参照。
docker上のnginx.confに環境変数を適用する方法

default.conf

server {
    server_name localhost;
    root /var/www/html/public;

    listen 80;
    location /foo {
        proxy_pass http://10.3.0.183:8000/;
        proxy_redirect off;

    }
    location /bar {
        proxy_pass http://10.3.0.183:8001/;
        proxy_redirect off;

    }
}

10.3.0.183ホストのプライベートIPアドレス。

host.docker.internalはLinuxでは使用できないためホストのIPアドレスを使用している。

今後の検討

  • 現在同一ネットワーク(bridge)にあるのでdefault.confのproxy_passは、おそらくhttp://172.17.0.2:8000http://172.17.0.3:8001でもアクセス可能なはず(要確認)
  • 異なるネットワークの場合は例のようにホストのプライベートIPアドレスを指定する必要があるはず(アクセスできることを確認)
$ sudo docker network inspect bridge
[
    {
        "Name": "bridge",
        // ...
        "Scope": "local",
        "Driver": "bridge",
        // ...
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        // ...
        "Containers": {
            "29e8b1a4bbb3203ec01cd8261b59585f4a275c8ea0b027be822367854ba261d0": {
                "Name": "apache",
                "EndpointID": "21f79415fd127ad303de189a19cccdc3c64f9597e0d0096b4ef19e79ab0064e8",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "a5c1e347df768cf30cad553f12287257cadb78718252c45b6e4e0e22de20aa2d": {
                "Name": "proxy",
                "EndpointID": "22eb2680df113fbb2292efb22ad4225d30c3e3d8ffb6a31f4f8ce41fb3241972",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "f5d183deb326c975d275d0b5145aa7b940dc7feeed0f1a0e3307f0a91ce24451": {
                "Name": "nginx",
                "EndpointID": "0e80bb9b77767cdd4fe3b0e7e9bb310611ad6db5cb658ecca1a55cb7c87bb576",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        // ...
    }
]