文武集

011 / 服务器

1Panel OpenResty 无限重启排查记

5 MIN文武集 Nº 2026.07

起因

1Panel 面板里 OpenResty 容器状态一直是"重启中",所有依赖它的网站全部打不开。更烦人的是——因为 OpenResty 没启动,面板里网站设置页面也操作不了,鸡生蛋蛋生鸡。

排查

第一步当然是看日志:

docker logs $(docker ps -a --filter "name=openresty" -q) --tail 100

日志里满屏都是同一行报错:

cannot load certificate "/www/sites/example.yourdomain.com/ssl/fullchain.pem": 
BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory)

原因很直白:example.yourdomain.com 这个站点配置了 HTTPS,但证书文件不存在。Nginx 启动时加载配置 → 找不到证书 → 启动失败 → Docker restart 策略让它再试 → 又失败 → 无限循环。

为什么证书会丢?

几种可能:

  • 站点创建时申请了证书,后来手动删除了证书文件
  • 用 Let's Encrypt 自动续期,但续期失败后旧证书过期被清理
  • 迁移或备份恢复时漏掉了证书目录
  • 手动清理磁盘时误删

不管哪种,结果一样:Nginx 配置里引用了一个不存在的文件,直接炸。

解法

因为 OpenResty 起不来,1Panel 面板里的网站管理页面也用不了,所以得直接在服务器上操作。

方式一:生成自签证书占位(推荐)

让证书文件"存在"就行,Nginx 不关心证书内容是否正确,只要文件在就能启动。启动后回到面板再正式申请正式证书。

## 确认证书目录路径,通常在:
ls /opt/1panel/apps/openresty/openresty/www/sites/example.yourdomain.com/ssl/

## 如果 ssl 目录不存在就创建
mkdir -p /opt/1panel/apps/openresty/openresty/www/sites/example.yourdomain.com/ssl/

## 生成自签证书占位
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /opt/1panel/apps/openresty/openresty/www/sites/example.yourdomain.com/ssl/privkey.pem \
  -out /opt/1panel/apps/openresty/openresty/www/sites/example.yourdomain.com/ssl/fullchain.pem \
  -subj "/CN=example.yourdomain.com"

## 重启 OpenResty
docker restart $(docker ps -a --filter "name=openresty" -q)

好处是保留了站点配置,启动后可以回到面板正常管理,再替换成正式证书。

方式二:删掉站点配置文件

如果暂时不需要这个站点,或者想回到面板重新配置,直接删掉对应的 Nginx 配置文件。

## 找到站点配置文件
ls /opt/1panel/apps/openresty/openresty/conf/conf.d/

## 先备份
cp /opt/1panel/apps/openresty/openresty/conf/conf.d/example.yourdomain.com.conf ~/站点配置备份.conf.bak

## 删除
rm /opt/1panel/apps/openresty/openresty/conf/conf.d/example.yourdomain.com.conf

## 重启
docker restart $(docker ps -a --filter "name=openresty" -q)

我这次用的方式二,删完重启,OpenResty 立刻正常。后续需要时再在面板里重新创建站点。

复盘

环节要点
现象OpenResty 容器不断重启
根因站点开了 HTTPS 但证书文件不存在
关键docker logs 一眼看穿
坑点面板操作依赖 OpenResty,必须绕过面板手动修
预防别手动删证书文件;Let's Encrypt 续期失败要及时处理

1Panel OpenResty 重启的常见原因速查

如果日志里不是证书问题,还有这些可能:

  1. 端口冲突:80/443 被其他进程占,ss -tuln | grep ':80 ' 检查
  2. 镜像不完整:特别是 ARM 架构,重新 docker pull
  3. 配置语法错误docker exec 进容器跑 nginx -t
  4. 磁盘满df -h 看一眼

但说实话,碰到 OpenResty 无限重启,十次有八次是证书文件的问题。

← 返回索引