帝国CMS插件开发

帝国CMS插件 · AI · 模板

您当前的位置:首页 > 网站运维

acme.sh安装免费SSL证书+Apache配置+自动续期完整实操教程

本文适用于LNMPA(Apache+MySQL+PHP)服务器环境,全程使用acme.sh工具部署ZeroSSL免费SSL证书,包含工具安装、证书申请、Apache环境配置、核心兼容坑点解析、全自动续期配置,一站式解决SSL部署、证书过期、Apache启动闪退等常见问题。

一、安装 acme.sh 证书工具

acme.sh 是一款开源免费的SSL证书申请、管理、自动续期工具,支持ZeroSSL、Let’s Encrypt等免费证书渠道,适配绝大多数Linux服务器环境,是搭建HTTPS站点的主流工具。

执行以下命令完成一键安装,并让工具全局命令即时生效:

curl https://get.acme.sh | sh source ~/.bashrc

命令解析:通过官方地址下载安装脚本并自动执行,完成工具安装;执行环境刷新命令后,无需重启服务器,可直接使用acme.sh相关指令。

二、申请免费SSL证书(前置条件+实操命令)

1. 部署前置条件

  • 域名已完成DNS解析,正确指向当前服务器公网IP

  • 服务器80端口开放,可被公网正常访问(域名验证必需)

  • 服务器防火墙、云平台安全组未拦截80端口访问

2. 证书申请命令

支持主域名+www子域名同时申请,覆盖全站HTTPS,命令格式如下:

acme.sh --issue -d fhqdgv.cn -d www.fhqdgv.cn --webroot /path/to/your/website/root

关键参数说明

  • -d:指定需要部署证书的域名,可同时添加主域名、子域名

  • --webroot:必填参数,填写网站真实根目录(示例:/var/www/html/),用于域名所有权验证

三、Apache服务SSL核心配置

证书申请完成后,需修改Apache主配置文件,开启SSL监听与SSL模块,否则HTTPS无法正常生效。

1. 编辑Apache配置文件

打开httpd.conf主配置文件:

开启80、443端口监听,加载SSL核心模块,配置内容如下:

Listen 80 Listen 443 LoadModule ssl_module modules/mod_ssl.so

配置说明:保留Listen 80可兼容HTTP访问,Listen 443开启HTTPS端口,加载ssl模块是Apache支持SSL证书的核心前提,若配置中对应语句带有注释符号#,需删除注释。

3. Apache启动闪退核心坑点(必看)

多数用户遇到 Apache启动提示成功,但ps查询不到httpd进程、服务秒退 的问题,核心原因是 MPM运行模式与PHP模块不兼容,属于LNMPA环境经典兼容问题。

Apache 有两种运行模式,两种模式互斥,不能同时开启,需要根据自己的服务器环境,保留适配的一种,把另一种注释关闭:

LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

两种模式详细介绍

mpm_event 和 mpm_prefork 代表了 Apache 两种不同的运行模式,Apache 启动后进程自动关闭的问题,通常源于这两种模式与 PHP 模块的线程安全兼容性不匹配。

核心原因在于 PHP 的线程安全性:

mod_mpm_event(事件驱动模式)

该模式采用多线程机制,单个进程可创建多个线程处理请求,具有高性能、低内存占用的优点。但其要求所有加载模块(包括 PHP)必须为线程安全版本(ZTS)。若使用非线程安全的 PHP(如多数 Windows 版本或未启用 ZTS 的 Linux 版本),在多线程环境下调用可能导致内存冲突,从而触发 Apache 主动终止进程以防止系统异常。

mod_mpm_prefork(预派生模式)

该模式采用多进程机制,每个请求由独立进程处理,彼此隔离。由于不依赖线程,因此可完美兼容非线程安全的 PHP 模块。尽管其并发性能不及 event 模式,但在稳定性和兼容性方面表现更优。

四、配置SSL证书全自动续期(一劳永逸)

ZeroSSL/Let’s Encrypt免费证书有效期仅90天,过期会导致网站HTTPS失效、浏览器拦截,必须配置自动续期。acme.sh支持自动检测续期,搭配定时任务可实现永久免维护。

1. 编辑定时任务

crontab -e

2. 添加全自动续期规则

粘贴以下完整配置,覆盖原有旧规则:

21 8 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null && lnmp reload > /dev/null 2>&1

3. 配置逐段解析

  • 21 8 * * *:定时规则,每天早上8点21分自动执行任务

  • acme.sh --cron:自动检测证书状态,剩余有效期不足时自动续期、替换新证书文件

  • lnmp reload:续期成功后平滑重载Apache服务,让新证书即时生效(核心关键,避免证书更新后不生效)

  • > /dev/null 2>&1:静默运行任务,正常日志、错误日志全部存入系统垃圾桶,不输出冗余信息、不占用服务器空间、不发送无用告警

4. 校验定时任务

执行以下命令查看配置是否生效:

crontab -l

能看到上述规则即配置成功,后续证书全程全自动续期、自动生效,无需人工干预。

五、配置 HTTP 强制跳转 HTTPS(可选推荐)

为保证网站全程加密访问、避免浏览器不安全提示,可配置 80端口HTTP自动跳转443端口HTTPS,所有访问自动强制加密。

1. 前置条件

确保Apache已开启 rewrite 伪静态模块(LNMPA环境默认开启)。

2. 跳转配置方法(二选一)

方法一:网站虚拟主机配置(推荐,全局生效)

编辑网站对应的 vhost 虚拟主机配置文件,在80端口 站点配置内添加以下规则:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

方法二:网站根目录.htaccess文件

在网站根目录新建/编辑 .htaccess 文件,添加:

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </IfModule>

3. 生效规则

保存配置后执行重载命令:

lnmp reload

配置完成后,访问 http://域名 会自动 301 永久跳转到 https://域名。

六、补充总结

  1. 免费SSL证书固定90天有效期,acme.sh会提前十余天自动续期,完全规避过期风险;

  2. Apache闪退99%为MPM模式兼容问题,优先使用prefork模式适配PHP+SSL环境【这个把我坑惨了】;

  3. 定时任务必须携带lnmp reload,否则新证书文件更新后,Apache仍使用旧证书;

  4. 整套配置完成后,HTTPS站点稳定运行,证书永久自动续期,无需后续维护。

返回首页