如何用 Docker 打造自带 HTTPS 功能的 Nginx 服务器

23 阅读3分钟

在当今数字化时代,网站的安全性至关重要。为了确保用户数据的安全传输,使用 HTTPS 协议已经成为标配。在日常的开发中,难免会碰到一些需要使用HTTPS协议进行访问的情况,而通过 Docker 来构建一个自带 HTTPS 功能的 Nginx 服务器,不仅可以简化部署过程,还能提高可移植性和可维护性。本文将详细介绍如何使用 Dockerfile 来实现这一目标。

一、准备工作

  1. 购买或生成 SSL 证书

    • 你可以从受信任的证书颁发机构购买 SSL 证书,也可以使用免费的证书生成工具,如 Let's Encrypt。确保你有证书文件(通常是 .crt 格式)和私钥文件(通常是 .key 格式)。
  2. 了解 Docker 基础知识

    • 熟悉 Docker 的基本概念和命令,如 Docker 镜像、容器、Dockerfile 等。

二、创建 Dockerfile

  1. 创建一个新的目录,用于存放 Dockerfile 和相关文件。
  2. 在该目录中创建一个名为 Dockerfile 的文件,并添加以下内容:
   # 基础镜像使用官方 Nginx 镜像
   FROM nginx

   # 安装必要的软件包以支持 SSL
   RUN apt-get update && apt-get install -y openssl

   # 生成自签名证书
   RUN mkdir -p /etc/nginx/ssl && \
       openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=localhost"

   # 将自定义配置文件复制到容器内
   COPY nginx_cors.conf /etc/nginx/conf.d/default.conf

   # 将外部 /data/share 目录挂载到容器内的 Nginx 网页目录
   VOLUME /usr/share/nginx/html /data/share

   EXPOSE 80
   EXPOSE 443

  1. 添加一个nginx的配置文件 nginx_cors.conf
   server {
       listen       80;
       listen       443 ssl;
       server_name  localhost;

       ssl_certificate /etc/nginx/ssl/nginx.crt;
       ssl_certificate_key /etc/nginx/ssl/nginx.key;

       location / {
           add_header 'Access-Control-Allow-Origin' '*';
           add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
           add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

           # 如果有需要,可以设置预检请求(preflight request)的缓存时间
           if ($request_method = 'OPTIONS') {
               add_header 'Access-Control-Max-Age' 1728000;
               add_header 'Content-Type' 'text/plain charset=UTF-8';
               add_header 'Content-Length' 0;
               return 204;
           }

           # 这里是你的实际服务内容
           root   /usr/share/nginx/html;
           index  index.html index.htm;
       }

       # error_page   500 502 503 504  /50x.html;
       # location = /50x.html {
       #     root   /usr/share/nginx/html;
       # }
   }


三、构建 Docker 镜像 在包含 Dockerfile 的目录中,打开终端并执行以下命令来构建 Docker 镜像:

docker build -t nginx-with-https .

这个命令将使用当前目录中的 Dockerfile 构建一个名为 nginx-with-https 的 Docker 镜像。 四、运行 Docker 容器 构建完成后,可以使用以下命令运行 Docker 容器:

docker run -d -p 80:80 -p 443:443 nginx-with-https

这个命令将在后台运行一个名为 nginx-with-https 的容器,并将容器的 80 端口和 443 端口映射到主机的相应端口。

五、测试 HTTPS 现在,你可以使用浏览器访问你的网站,地址栏应该显示为 HTTPS 协议,并且浏览器会显示一个锁图标,表示连接是安全的。

通过以上步骤,你成功地使用 Dockerfile 构建了一个自带 HTTPS 功能的 Nginx 服务器。这种方法不仅方便快捷,还可以确保你的网站在不同环境中都能提供安全的通信。无论是开发、测试还是生产环境,都可以轻松部署和管理这个安全的 Nginx 服务器。