nginxコンテナを使ってみる②（アクセス制限）

nginxでアクセス制限をしてみる。

#IPアドレス制限
設定ファイルでdenyまたはallowを定義する。
引数はIPアドレス または allという文字列。
IPドレスはCIDRで範囲指定可能。

deny 172.21.1.1
deny 172.21.0.0/16
allow all

さっそく設定ファイルをいじってみる。

```test:コンテナ起動
[ec2-user]$ docker container run -d -p 80:80 --name nginx nginx:latest
2a01374534f5997dd2b44a8422b63eccff0d6a1ce21b82aa6f6dc3b10928de89
[ec2-user]$
[ec2-user]$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2a01374534f5        nginx:latest        "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds        80/tcp              nginx
[ec2-user]$
```

```sh:設定ファイル修正
root@6775ebb4074c:~# vi /etc/nginx/nginx.conf
bash: vi: command not found
root@6775ebb4074c:~#
```

viが入っていない、、入れるか。

```sh:yumも入っていない
root@6775ebb4074c:~# yum install -y vim
bash: yum: command not found
root@6775ebb4074c:~#
```

yumも入ってない、、う～ん。

面倒になってきたので
ホスト側に設定ファイルをコピーしてきて
修正したのちコンテナ内に戻すことにした。

気を取り直して
まずは以下を設定ファイルに追加してみる。

##deny all;

```sh:設定ファイルコピー（ホスト←コンテナ）
[ec2-user]$ docker container cp nginx:/etc/nginx/nginx.conf .
[ec2-user]$
```

```sh:設定ファイル修正
vi nginx.conf

～～ 前略 ～～

http {
    deny all;
    include       /etc/nginx/mime.types;

～～ 後略 ～～
```

```sh:設定ファイルコピー（ホスト→コンテナ）
[ec2-user]$ docker container cp ./nginx.conf nginx:/etc/nginx/nginx.conf
[ec2-user]$
```

```sh:設定ファイルのエラーチェック
[ec2-user]$ docker container exec nginx /bin/bash -c "nginx -t"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ec2-user]$
```

```sh:コンテナ再起動
[ec2-user]$ docker container restart nginx
nginx
[ec2-user]$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2a01374534f5        nginx:latest        "/docker-entrypoint.…"   10 minutes ago      Up 5 seconds        80/tcp              nginx
[ec2-user]$
```

ブラウザアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651099/f5e7b42a-8e1b-65fb-d1f3-a518dfac4df5.png)

たしかに拒否された。

##allow IPアドレス;
allowで許可設定を行う。
allowやdenyを複数書いた場合は最初に該当したものが適用される。

せっかくなのでdeny allは残したまま
その前にallowを追加してみる。

```sh:設定ファイル修正
vi nginx.conf

～～ 前略 ～～

http {
    allow xx.xx.xx.xx;
    deny all;
    include       /etc/nginx/mime.types;

～～ 後略 ～～
```

```sh:設定ファイルコピー（ホスト→コンテナ）
[ec2-user]$ docker container cp ./nginx.conf nginx:/etc/nginx/nginx.conf
[ec2-user]$
```

```sh:設定ファイルのエラーチェック
[ec2-user]$ docker container exec nginx /bin/bash -c "nginx -t"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[ec2-user]$
```

```sh:コンテナ再起動
[ec2-user]$ docker container restart nginx
nginx
[ec2-user]$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2a01374534f5        nginx:latest        "/docker-entrypoint.…"   28 minutes ago      Up 4 seconds        80/tcp              nginx
[ec2-user]$
```

ブラウザアクセス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651099/81c17f5e-0e60-feca-ef6c-f1896fa8b4db.png)

想定どおり繋がった。