docker pull nginx:1.27
注: 国内网络原因无法下载镜像,nginx 镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pwd=yjsv 提取码: yjsv。
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
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
# Linux 环境
netstat -tulpn | grep :80
# Mac 环境
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep LISTEN | grep ":80"
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协议过渡。这有助于保护用户隐私、增强网站安全性,并提升搜索引擎排名。
cd /home/nginx/conf.d
vim default.conf
server {
listen 80;
listen [::]:80;
server_name mydomain.com;
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;
}
}
# 直接执行命令
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
注意: 以下所有操作均在容器内执行。
# 设置阿里云镜像源
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
# 下载源码
# git clone https://github.com/acmesh-official/acme.sh.git
git clone https://gitee.com/wufengsheng/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
注意: 验证文件会自动生成在 /usr/share/nginx/html/.well-known/acme-challenge/ 目录下,域名所有权验证完成后会自动删除验证文件。
./acme.sh --install-cert -d mydomain.com \
--key-file /etc/nginx/ssl/mydomain.com.key \
--fullchain-file /etc/nginx/ssl/mydomain.com.pem
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 -s reload
./acme.sh --info -d mydomain.com
注: 列出域名 SSL 证书文件目录信息与SSL 证书下次更新时间。