【备忘录】使用Docker和nginx创建反向代理(SSL加密)

我想将网站转为SSL化。

目标

我想将在AWS EC2上运行的应用程序进行SSL加密。

应用程序简介

ブログサイト
WordpressからデータをGraphQLで、データを取得しVue.jsでblogデータを表示する。

メリット

バニラのWordpressより、カスタム性が高い。
ブログデータの入力をWordpressのUIを使ってできるため、感覚的にブログの編集が行える

战略

    リバースプロキシを使ってアプリケーションへSSLでアクセスできるようにする
1.jpg
図1.png

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

work.jpg

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

bannerAds