nginx配置https协议

获取密钥对和证书

  1. 使用openssl获取密钥对和证书,密钥对使用文件domain.key存放,证书使用domain.crt存放

  2. 新建文件夹ssl,并在ssl文件夹下分别创建certs、static两个文件夹:

    mkdir -p ssl/certs
    mkdir -p ssl/static
  3. 将密钥对和证书文件移入certs目录下:

    cp domain.crt ssl/certs
    cp domain.key ssl/certs
  4. 在static路径下新建一个index.html页面:

    echo '
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
    </html>
    ' > ssl/static/index.html
  5. 在ssl目录下新建custom.conf文件:

    vim ssl/custom.conf
    server
    {
        listen 80;
        listen 443 ssl;
        server_name  192.168.10.110;
        index  index.html  index.htm;
    
        location / {
            root   /usr/share/nginx/html;
        }
    
        # ssl_certificate表示证书路径
        ssl_certificate /certs/domain.crt;
        # ssl_certificate_key表示密钥对路径
        ssl_certificate_key /certs/domain.key;
    }
  6. 在ssl目录下创建Dockerfile:

    注意:在nginx容器的/etc/nginx/conf.d目录下默认存在一个default.conf配置文件,该配置文件中配置了一个监听80端口的虚拟机主机(server),所以在当前的测试实例中,如果不覆盖该文件,会导致配置冲突!

    vim ssl/Dockerfile
    FROM nginx:1.14.2
    
    LABEL MAINTAINCE="bohanz838@gmail.com"
    
    ADD certs /certs
    ADD custom.conf /etc/nginx/conf.d/default.conf
    ADD static /usr/share/nginx/html
  7. 在ssl目录下创建compose.yaml:

    vim ssl/compose.yaml
    services:
      nginx:
        build:
          context: .
          tags:
            - "nginx:v1"
        ports:
          - 443:443
          - 80:80
  8. 检查:

    $ ls -lR ssl
    ssl:
    总用量 12
    drwxrwxr-x. 2 docker docker  42 11月 21 20:26 certs
    -rw-rw-r--. 1 docker docker 121 11月 21 20:35 compose.yaml
    -rw-rw-r--. 1 docker docker 342 11月 21 20:28 custom.conf
    -rw-rw-r--. 1 docker docker 157 11月 21 20:29 Dockerfile
    drwxrwxr-x. 2 docker docker  24 11月 21 20:27 static
    
    ssl/certs:
    总用量 8
    -rw-rw-r--. 1 docker docker 1403 11月 21 20:26 domain.crt
    -rw-rw-r--. 1 docker docker 1704 11月 21 20:26 domain.key
    
    ssl/static:
    总用量 4
    -rw-rw-r--. 1 docker docker 179 11月 21 20:27 index.html
  9. 使用docker compose启动服务:

    cd ssl
    docker compose up -d
  10. 在浏览器中进行测试:

证书中的通用名称并不需要绝对匹配:

生成证书时使用example.com作为通用名称,但是上述的nginx配置使用IP地址进行访问,在这种情况下,并未出现异常反应。

但是,这并不能说明通用名称是无用的,可能是因为被自签名证书本就存在的异常信息所掩盖了!

Last updated