【备忘录】使用Docker和nginx创建反向代理(SSL加密)
我想将网站转为SSL化。
目标
我想将在AWS EC2上运行的应用程序进行SSL加密。
应用程序简介
ブログサイト
WordpressからデータをGraphQLで、データを取得しVue.jsでblogデータを表示する。
メリット
バニラのWordpressより、カスタム性が高い。
ブログデータの入力をWordpressのUIを使ってできるため、感覚的にブログの編集が行える
战略
- リバースプロキシを使ってアプリケーションへSSLでアクセスできるようにする


SSL化步骤
这是一个必要条件
-
- AWS
EC2(t3.small)を利用する
アプリケーション
docker-composeを利用して、デプロイを用意に行えるようにする。
SSL
LetsEncryptでSSL化を行う
创建反向代理服务器。
我参考了以下的文章。
1. 进行以下文件夹(文件)结构配置
├── docker-compose.yml
├── cat-server
│ └── index.html
├── dog-server
│ └── index.html
└── reverse-proxy
│ └── nginx.conf
│ └── index.html
└── letsencrypt
└── docker-compose.yml
创建index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>犬好きのためのページ</title>
</head>
<body>
<h1>犬好きのためのページ</h1>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>猫好きのためのページ</title>
</head>
<body>
<h1>猫好きのためのページ</h1>
</body>
</html>
创建nginx的配置文件。
events {
worker_connections 16;
}
http {
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/letsencrypt/live/{your_domain_name}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{your_domain_name}/privkey.pem;
location /dog {
proxy_pass http://host.docker.internal:8000/;
proxy_redirect off;
}
location /cat {
proxy_pass http://host.docker.internal:7001/;
proxy_redirect off;
}
}
server{
listen 80;
return 301 https://host.docker.internal:8000/;
}
}
请在{你的_域名}中输入您自己的域名。
创建一个docker-compose.yml文件
version: "3"
services:
dog-server:
image: nginx
container_name: "dog-container"
volumes:
- ./dog-server:/usr/share/nginx/html
ports:
- 8000:80
extra_hosts:
- "host.docker.internal:host-gateway"
cat-server:
image: nginx
container_name: "cat-container"
volumes:
- ./cat-server:/usr/share/nginx/html
ports:
- 7001:80
extra_hosts:
- "host.docker.internal:host-gateway"
reverse-proxy:
image: nginx:alpine
restart: always
volumes:
- ./reverse-proxy/nginx.conf:/etc/nginx/nginx.conf
- letsencrypt-cert:/etc/letsencrypt:ro
ports:
- 80:80
- 443:443
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
letsencrypt-cert:
external: true
创建 Docker 卷:letsencrypt-cert
创建一个用于获取证书的docker-compose.yml文件。
version: "3"
services:
letsencrypt:
image: certbot/certbot
ports:
- 80:80
- 443:443
volumes:
- letsencrypt-cert:/etc/letsencrypt
entrypoint:
certbot certonly
--standalone
-m {your_email}
--agree-tos
-d {your_domain_name}
volumes:
letsencrypt-cert:
external: true
请在{your_domain_name}上输入您自己的电子邮件地址和域名。
7. 获取证书
进入letsencrypt文件夹,并启动容器
$ cd letsencrypt
$ docker-compose up -d
8. 启动服务器
启动使用第4步创建的docker-compose.yml(容器)。
$ cd ../
$ cd docker-compose up -d

打开Chrome浏览器时,出现了一个带有锁形标志的SSL标志,表示通信是安全的。