帝国CMS插件 · AI · 模板
本文适用于LNMPA(Apache+MySQL+PHP)服务器环境,全程使用acme.sh工具部署ZeroSSL免费SSL证书,包含工具安装、证书申请、Apache环境配置、核心兼容坑点解析、全自动续期配置,一站式解决SSL部署、证书过期、Apache启动闪退等常见问题。
acme.sh 是一款开源免费的SSL证书申请、管理、自动续期工具,支持ZeroSSL、Let’s Encrypt等免费证书渠道,适配绝大多数Linux服务器环境,是搭建HTTPS站点的主流工具。
执行以下命令完成一键安装,并让工具全局命令即时生效:
curl https://get.acme.sh | sh source ~/.bashrc
命令解析:通过官方地址下载安装脚本并自动执行,完成工具安装;执行环境刷新命令后,无需重启服务器,可直接使用acme.sh相关指令。
域名已完成DNS解析,正确指向当前服务器公网IP
服务器80端口开放,可被公网正常访问(域名验证必需)
服务器防火墙、云平台安全组未拦截80端口访问
支持主域名+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监听与SSL模块,否则HTTPS无法正常生效。
打开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证书的核心前提,若配置中对应语句带有注释符号#,需删除注释。
多数用户遇到 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 模式,但在稳定性和兼容性方面表现更优。
ZeroSSL/Let’s Encrypt免费证书有效期仅90天,过期会导致网站HTTPS失效、浏览器拦截,必须配置自动续期。acme.sh支持自动检测续期,搭配定时任务可实现永久免维护。
crontab -e
粘贴以下完整配置,覆盖原有旧规则:
21 8 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null && lnmp reload > /dev/null 2>&1
21 8 * * *:定时规则,每天早上8点21分自动执行任务
acme.sh --cron:自动检测证书状态,剩余有效期不足时自动续期、替换新证书文件
lnmp reload:续期成功后平滑重载Apache服务,让新证书即时生效(核心关键,避免证书更新后不生效)
> /dev/null 2>&1:静默运行任务,正常日志、错误日志全部存入系统垃圾桶,不输出冗余信息、不占用服务器空间、不发送无用告警
执行以下命令查看配置是否生效:
crontab -l
能看到上述规则即配置成功,后续证书全程全自动续期、自动生效,无需人工干预。
为保证网站全程加密访问、避免浏览器不安全提示,可配置 80端口HTTP自动跳转443端口HTTPS,所有访问自动强制加密。
确保Apache已开启 rewrite 伪静态模块(LNMPA环境默认开启)。
编辑网站对应的 vhost 虚拟主机配置文件,在80端口 站点配置内添加以下规则:
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
在网站根目录新建/编辑 .htaccess 文件,添加:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </IfModule>
保存配置后执行重载命令:
lnmp reload
配置完成后,访问 http://域名 会自动 301 永久跳转到 https://域名。
免费SSL证书固定90天有效期,acme.sh会提前十余天自动续期,完全规避过期风险;
Apache闪退99%为MPM模式兼容问题,优先使用prefork模式适配PHP+SSL环境【这个把我坑惨了】;
定时任务必须携带lnmp reload,否则新证书文件更新后,Apache仍使用旧证书;
整套配置完成后,HTTPS站点稳定运行,证书永久自动续期,无需后续维护。