社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

新人必看:nginx如何自动托管更新https证书

乐谷说 • 3 周前 • 111 次点击  

 

Nginx自动HTTPS证书管理:让安全与效率齐头并进

在互联网服务搭建中,HTTPS证书的管理是保障数据安全的基础环节。手动操作不仅繁琐,还可能因过期导致服务中断。借助Let's Encrypt免费证书与自动化工具,我们能实现证书的一键申请、自动续期,让技术团队将精力放在业务创新上。以下是两种主流方案的实践指南,以简洁步骤帮助理解与落地。

一、Certbot方案:开箱即用的Nginx配置工具

Certbot是Let's Encrypt官方推荐工具,支持与多种Web服务器集成,配置流程高度自动化。

1. 环境准备

  • • 一台运行Nginx的服务器(如Ubuntu、CentOS)
  • • 已解析至服务器的域名(如example.comwww.example.com
  • • Nginx服务正常运行(可通过systemctl status nginx验证)

2. 安装Certbot与Nginx插件
根据系统选择对应命令:

# Ubuntu/Debian系统
sudo apt update && sudo apt install certbot python3-certbot-nginx -y

# CentOS系统
sudo yum install certbot python3-certbot-nginx -y

3. 一键申请证书并配置Nginx
执行命令(替换your_domain为实际域名):

sudo certbot --nginx -d your_domain -d www.your_domain
  • • 自动验证:Certbot会通过HTTP-01标准验证域名所有权(无需手动修改DNS)。
  • • 配置生效:自动修改Nginx配置,添加HTTPS监听(端口443),并将HTTP请求(端口80)永久重定向至HTTPS(通过301状态码)。
  • • 安全通知:过程中需输入邮箱,用于证书过期、吊销等重要事件的提醒。

4. 测试证书续期
Let's Encrypt证书有效期为90天,需定期续期。执行测试命令:

sudo certbot renew --dry-run
  • • 验证逻辑:模拟续期流程,检查是否存在配置错误,确保Nginx在续期后能正常重载(reload)。

5. 设置定时自动续期
系统通常预装了Certbot的定时任务(每日两次检查),若需手动配置:

# 编辑定时任务
sudo crontab -e

添加以下内容(每日凌晨3点检查并续期,成功后重载Nginx):

0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

二、Acme.sh方案:轻量无依赖的Shell工具

若偏好轻量化工具,Acme.sh是另一个优秀选择,纯Shell脚本实现,无需系统级安装Nginx插件。

核心步骤

  1. 1. 安装Acme.sh
    curl https://get.acme.sh | sh
    # 或手动安装
    git clone https://github.com/acmesh-official/acme.sh.git && cd acme.sh && ./acme.sh --install
  2. 2. 申请证书
    以Webroot模式为例(需指定网站根目录):
    acme.sh --issue -d your_domain -d www.your_domain --webroot /var/www/yourdomain
  3. 3. 安装证书至Nginx
    acme.sh --installcert -d your_domain \
      --key-file /etc/nginx/ssl/yourdomain/key.pem \
      --fullchain-file /etc/nginx/ssl/yourdomain/cert.pem \
      --reloadcmd "systemctl reload nginx"
  4. 4. 配置定时续期
    添加定时任务:
    acme.sh --cron --install --cron "0 3 * * * acme.sh --renew -d your_domain --reloadcmd 'systemctl reload nginx'"

三、关键注意事项

  • • 文件路径:Certbot证书默认存储在 /etc/letsencrypt/live/your_domain/,包含fullchain.pem(证书链)和privkey.pem(私钥)。
  • • 端口开放:确保服务器80(HTTP)和443(HTTPS)端口可对外访问,否则验证或续期会失败。
  • • 生产环境:建议搭配ssl_protocols TLSv1.2 TLSv1.3ssl_ciphers等安全配置,提升连接安全性。

总结

无论是Certbot(适合新手,依赖Nginx插件)还是Acme.sh(轻量无依赖),都能实现HTTPS证书的全流程自动化管理。通过定时续期与Nginx配置联动,可彻底告别证书过期风险,让服务始终以安全状态对外提供访问。选择工具时,可根据团队技术栈和服务器环境灵活决定,核心目标是将安全管理从手动操作变为“零干预”流程,释放技术资源投入更核心的业务价值。

(注:本文方法适用于所有支持Let's Encrypt的Web服务器,包括Apache、Nginx等,具体可参考工具官方文档调整参数。)

新问题

  • • 如何处理多域名证书申请?
  • • 证书续期失败的常见原因?
  • • 不同服务器类型部署差异?

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185919
 
111 次点击