Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书

docker

docker pull nginx:1.27

注: 国内网络原因无法下载镜像,nginx 镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pwd=yjsv 提取码: yjsv

  • 导入 nginx 镜像
docker load -i nginx-1.27.tar
  • 创建缩主机目录
cd /home
mkdir nginx && cd nginx
mkdir ssl logs
  • 拷贝容器内目录与文件
docker run --name nginx -d nginx:1.27
# 拷贝容器内目录与文件
docker cp nginx:/etc/nginx/nginx.conf /home/nginx
docker cp nginx:/etc/nginx/conf.d /home/nginx
docker cp nginx:/usr/share/nginx/html /home/nginx

docker-compose.yml

services:
  nginx:
    image: nginx:1.27
    container_name: nginx
    restart: always
    # network_mode: "host"
    ports:
      - 8080:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /home/nginx/conf.d:/etc/nginx/conf.d
      - /home/nginx/ssl:/etc/nginx/ssl
      - /home/nginx/logs:/var/log/nginx
      - /home/nginx/html:/usr/share/nginx/html
docker-compose up -d nginx
  • 查看 80 端口被占用情况
# Linux 环境
netstat -tulpn | grep :80
# Mac 环境
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep LISTEN | grep ":80"

申请免费 SSL 证书

Let’s Encrypt 是一个非营利组织提供的免费SSL/TLS证书颁发机构,旨在促进网站加密和网络安全普及化。

  • 免费性质: Let’s Encrypt 提供的SSL证书完全免费,没有任何费用。这使得任何网站都可以轻松获取和部署HTTPS加密,无需支付昂贵的证书费用。

  • 自动化: Let’s Encrypt 支持自动化证书颁发和更新过程。使用自动化工具(比如 Certbot),可以轻松地配置服务器以自动申请、安装和更新证书,无需人工干预。

  • 开放标准: Let’s Encrypt 遵循开放、透明和合作的原则。他们的证书签发过程和证书信息都是公开的,符合Web安全和隐私保护的最佳实践。

  • 支持广泛: Let’s Encrypt 的证书得到了各大操作系统、浏览器和服务器的广泛支持,可以与几乎所有的Web服务器(如Apache、Nginx等)和操作系统(如Linux、Windows等)兼容使用。

  • 推动HTTPS普及: Let’s Encrypt 的出现大大促进了全球范围内网站从不安全的HTTP协议向安全的HTTPS协议过渡。这有助于保护用户隐私、增强网站安全性,并提升搜索引擎排名。

注意: 该证书只适用于部分浏览器如Chrome,其它浏览器可能会出现 SSL证书错误

配置 Nginx 验证域名所有权

cd /home/nginx/conf.d
vim default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        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;
    }
	
    # 配置 Nginx 验证域名所有权
    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /usr/share/nginx/html; 
    }
}
  • 重新加载 nginx 配置
# 直接执行命令
docker exec nginx nginx -v
docker exec nginx nginx -t
docker exec nginx nginx -s reload
# 或进入进入容器内执行
docker exec -it nginx /bin/bash
# 测试配置
nginx -t
# 重新加载配置
nginx -s reload

安装 acme.sh

注意: 以下所有操作均在容器内执行。

  • 安装 acme.sh 依赖
# 设置阿里云镜像源
sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt-get clean
apt-get update
apt-get install -y git socat cron vim
  • 安装 acme.sh
# 下载源码
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
# 查看帮助
./acme.sh -h
# 安装 acme.sh
./acme.sh --install -m xxxxxxxx@qq.com
  • 安装成功后自动会添加更新证书定时任务
# 查看 acme.sh 更新证书定时任务
crontab -l

注: 目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心。

  • 域名所有权完成验证后将自动生成证书
./acme.sh --issue -d mydomain.com -w /usr/share/nginx/html
  • http://mydomain.com/.well-known/acme-challenge/wyN1055oc15cznMobG4UktJmsv-1XzLs02wHX4ItZ44

注意: 验证文件会自动生成在 /usr/share/nginx/html/.well-known/acme-challenge/ 目录下,域名所有权验证完成后会自动删除验证文件。

生成 SSL 证书

./acme.sh --install-cert -d mydomain.com \
--key-file       /etc/nginx/ssl/mydomain.com.key  \
--fullchain-file /etc/nginx/ssl/mydomain.com.pem
  • 修改配置文件,添加 SSL 证书配置
cd /home/nginx/conf.d
vim default.conf
server {
    listen        80;
    server_name   mydomain.com;
    rewrite ^(.*) https://mydomain.com$1 permanent;
}

server {
    listen       443 ssl;
    server_name  mydomain.com;
    
    # 配置 SSL 证书
    ssl_certificate /etc/nginx/ssl/mydomain.com.pem;
    ssl_certificate_key /etc/nginx/ssl/mydomain.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;

    client_max_body_size 20M;
    client_body_buffer_size 128k;
	
    location / {
        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;
    }
}
  • 重新加载 nginx 配置
nginx -s reload

查看已安装证书

./acme.sh --info -d mydomain.com

在这里插入图片描述

注: 列出域名 SSL 证书文件目录信息与SSL 证书下次更新时间。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker是一种开源的容器化平台,可轻松部署、运行和管理容器化应用程序。Nginx是一款高性能的Web服务器和反向代理服务器,而Nginx Proxy Manager则是一个基于Nginx的图形化界面工具,用于管理Nginx代理服务器。 要在Docker部署Nginx Proxy Manager,需要执行以下步骤: 1. 首先,确保你的系统上已安装了Docker。你可以通过命令"docker --version"来检查是否已成功安装。 2. 打开终端或命令提示符,并使用Docker命令从Docker Hub下载Nginx Proxy Manager的镜像。可以使用以下命令下载并创建容器: ``` docker run -d -p 80:80 -p 81:81 -p 443:443 -v nginx-proxy-manager_data:/data -v /var/run/docker.sock:/var/run/docker.sock jlesage/nginx-proxy-manager ``` 3. 这个命令会从Docker Hub上下载最新版本的Nginx Proxy Manager镜像,并在本地创建一个名为"nginx-proxy-manager"的容器。该容器将监听80、81和443端口,并将其映射到宿主机上。 此外,该命令还将容器中的/data目录映射到名为nginx-proxy-manager_data的Docker卷,以及将宿主机的/var/run/docker.sock文件映射到容器的/var/run/docker.sock文件中。 4. 当容器成功创建后,你可以通过访问http://localhost:81来访问Nginx Proxy Manager的图形化界面。在该界面中,你可以添加和管理Nginx反向代理服务器、创建和编辑主机、设置SSL证书等。 通过以上几个简单的步骤,你可以在Docker中轻松地部署Nginx Proxy Manager,实现代理服务器的管理与配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值