memo.log

技術情報の雑なメモ

Docker と Nginx でリバースプロキシを構成する最低限のメモ

前提

  • 構成は以下のイメージ
    • ホストで80番ポートで受ける、DockerのNginxは80番ポートで受ける、後ろに80番ポートで流す
  • docker はインストール済であること、後ろのサーバは動いていること
  • Amazon Linux2
    • Linux ip-172-31-4-104.ap-northeast-1.compute.internal 4.14.219-161.340.amzn2.aarch64

f:id:kuredev:20210222195409p:plain

手順メモ

①Nginx設定ファイル作成

素のNginxの設定ファイルから持ってきつつ、リバプロっぽい設定を入れた。 ポイントは include /etc/nginx/conf.d/*.conf; を削除したところだったぽい。 もともとDockerでNginxを起動するとコンテナ内でこの /etc/nginx/conf.d/*.conf; ディレクトリに設定ファイルが合ってそちらも読み込まれてしまうとうまくリバプロとして動かなかった。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        location /test {
            proxy_pass http://[後ろのサーバのIPアドレス]/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

②Dockerファイル作成

[ec2-user@ip-172-31-4-104 docker]$ pwd
/home/ec2-user/docker
[ec2-user@ip-172-31-4-104 docker]$ ls
Dockerfile  nginx.conf
[ec2-user@ip-172-31-4-104 docker]$ cat Dockerfile
FROM nginx:latest

ADD ./nginx.conf /etc/nginx/nginx.conf

③ Docker のイメージ作成、コンテナ作成、コンテナ起動

$ sudo docker build -t nginx-img ./
$ sudo docker create --name nginx-container -p 80:80 -it [Image ID]
$ sudo docker start [Container ID]

※③' docker-composer でコンテナを実行する場合

以下のように設定ファイルを準備し、実行

[ec2-user@ip-172-31-4-104 docker]$ cat docker-compose.yml
version: '3'
services:
  nginx:
    build: .
    ports:
     - "80:80"
[ec2-user@ip-172-31-4-104 docker]$ sudo docker-compose up

④動作確認

外からDocker/Nginxのサーバに向けて

http://[IP Addr]/test

で後ろのサーバのコンテンツが返ってくるはず。

参考

nginx https://hub.docker.com/_/nginx

【Docker】Nginxのconfで環境変数を使う - Qiita https://qiita.com/jungissei/items/2d6b40320b520f52b502

Compose を始めましょう — Docker-docs-ja 19.03 ドキュメント https://docs.docker.jp/compose/gettingstarted.html#dockerfile