准备工作

在使用 Docker 搭建支持 https 的 nginx 代理服务之前,我们需要做一些准备工作:

1. 确保你已经安装了 Docker 和 Docker Compose。

2. 你需要有一个域名,并且需要将该域名解析到你的服务器 IP 地址,以便后续申请证书。

生成 SSL 证书

为了支持 https,我们需要生成 SSL 证书。下面是一种快速生成免费 SSL 证书的方法:

1. 打开终端,执行以下命令:


docker run -it --rm \
  -v "${PWD}/certbot:/etc/letsencrypt" \
  -v "${PWD}/certbot/www:/var/www/certbot" \
  certbot/certbot certonly
Bash

2. 这个命令会启动一个 certbot 容器,并通过交互式命令行引导你申请证书。按照提示输入邮箱地址和域名,并选择 Standalone 方式进行验证。

3. 证书生成完成后,你可以在 certbot/www 目录下找到生成的证书文件。

配置 nginx 反向代理

现在我们来配置 nginx 反向代理,并将之前生成的 SSL 证书应用到 nginx 上:

1. 创建一个 Docker Compose 文件,内容如下:


version: '3'

services:
  nginx-proxy:
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./certbot/www:/var/www/certbot
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certbot/letsencrypt:/etc/letsencrypt
YAML

2. 创建一个 nginx.conf 文件,内容如下:


worker_processes  1;

events {
    worker_connections  1024;
}

http {
    server {
        listen       80;
        server_name  your-domain.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    server {
        listen 443 ssl;
        server_name your-domain.com;

        ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
nginx

3. 将上面两个文件放到同一个目录下,并在终端运行以下命令启动容器:


docker-compose up -d
Bash

此时,你已经成功搭建了一个基于 Docker 的支持 https 的 nginx 代理服务。你可以通过访问 https://your-domain.com 来验证是否生效。