こんにちは、ニキです。
この記事はこんな方におすすめです。
- Docker composeやNginx の基本的なことは分かる。
- compose.yamlやdefault.confの具体的な設定方法を知りたい。
- SSL通信できるようにしたい。
- Nginxを使ってリバースプロキシしたい。
今回の記事では、リバースプロキシをするためにcompose.yamlとdefault.confの具体的な設定方法を解説します。先にSSL通信なしパターンを解説した後に、SSL通信ありパターンを解説します。
Docker composeを使ってSSL非対応のNginxをリバースプロキシとして扱う
まずは、SSL非対応です。
default.confを作成する
Nginxの設定ファイルとしてdefault.confを用意します。
% touch default.conf
default.confを以下のように編集します。コンテナ内部からホストを参照したいのでhost.docker.internalを使用しています。
server {
listen 80;
server_name localhost;
location / {
proxy_pass <http://host.docker.internal:8081/>;
}
}
index.htmlを作成する
プロキシできているかを確認するために、index.htmlを作成します。
% touch index.html
index.htmlの編集例です。
<h1>Hello Nginx!</h1>
compose.yamlを作成する
compose.yamlを作成します。
% touch compose.yaml
compose.yamlを以下のように編集します。リバースプロキシされるAPIサーバーとして、今回は簡単のためにNginxを使用しています。
services:
nginx:
image: nginx:1.25.1-alpine-slim
container_name: nginx
ports:
- 8080:80
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
api:
image: nginx:1.25.1-alpine-slim
container_name: api
ports:
- 8081:80
volumes:
- ./index.html:/usr/share/nginx/html/index.html
コンテナを作成する
コンテナを作成・起動します。
% docker compose up -d
コンテナが動作していることを確認します。
% docker compose ps
以下のように表示されていれば正常に動作しています。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
api nginx:1.25.1-alpine-slim "/docker-entrypoint.…" api 2 minutes ago Up 2 minutes 0.0.0.0:8081->80/tcp
nginx nginx:1.25.1-alpine-slim "/docker-entrypoint.…" nginx 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp
http://localhost:8080/ にアクセスして、以下のように表示されていれば成功です。
Docker composeを使ってSSL非対応のNginxをリバースプロキシとして扱う
次に、SSLに対応させます。
default.confを作成する
Nginxの設定ファイルとしてdefault.confを用意します。
% touch default.conf
default.confを以下のように編集します。
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/conf.d/localhost.pem;
ssl_certificate_key /etc/nginx/conf.d/localhost-key.pem;
location / {
proxy_pass <http://host.docker.internal:8081/>;
}
}
秘密鍵とSSL証明書を新たに用意するなら以下の記事が参考になります。
compose.yamlを変更する
compose.yamlを以下のように変更します。
services:
nginx:
image: nginx:1.25.1-alpine-slim
container_name: nginx
ports:
- 8443:443
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- $PWD/localhost.pem:/etc/nginx/conf.d/localhost.pem
- $PWD/localhost-key.pem:/etc/nginx/conf.d/localhost-key.pem
api:
image: nginx:1.25.1-alpine-slim
container_name: api
ports:
- 8081:80
volumes:
- ./index.html:/usr/share/nginx/html/index.html
コンテナを再作成する
コンテナを停止・削除します。
% docker compose down
コンテナを作成・起動します
% docker compose up -d
コンテナが動作していることを確認します。
% docker compose ps
以下のようにPORTSの値が変更されて表示されていれば正常に動作しています。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
api nginx:1.25.1-alpine-slim "/docker-entrypoint.…" api 2 minutes ago Up 2 minutes 0.0.0.0:8081->80/tcp
nginx nginx:1.25.1-alpine-slim "/docker-entrypoint.…" nginx 2 minutes ago Up 2 minutes 80/tcp, 0.0.0.0:8443->443/tcp
https://localhost:8443/ にアクセスして、同様の表示がされていれば成功です。
まとめ
今回の記事では、リバースプロキシをするためにcompose.yamlとdefault.confの具体的な設定方法を解説しました。