fix(https): 修复域名提取携带分号导致证书申请失败

修正 https.sh 中 server_name 提取与 certbot 参数构建逻辑,避免将 `credit99.cn;` 等非法域名传给 certbot;同时在 start.sh 增加域名规范化与格式校验,提前拦截协议前缀、路径和分号等脏输入。

Made-with: Cursor
This commit is contained in:
2026-03-31 15:04:56 +08:00
parent e66b3c71af
commit b7dddfb750
2 changed files with 53 additions and 4 deletions
+15 -4
View File
@@ -120,10 +120,21 @@ sudo nginx -s stop
echo "🚀 使用certbot 自动配置证书"
# 从 Nginx 配置文件中提取所有域名
CONF_FILE="${EASYAI_PROXY_CONF:-easyai-proxy.conf}"
DOMAINS=$(grep "server_name" /etc/nginx/conf.d/"$CONF_FILE" 2>/dev/null || find /etc/nginx/conf.d/ -name "easyai-proxy.conf" -exec grep "server_name" {} \; | \
SERVER_NAME_LINES=$(
if [ -f "/etc/nginx/conf.d/$CONF_FILE" ]; then
grep "server_name" "/etc/nginx/conf.d/$CONF_FILE" 2>/dev/null || true
else
find /etc/nginx/conf.d/ -name "easyai-proxy.conf" -exec grep "server_name" {} \; 2>/dev/null || true
fi
)
DOMAINS=$(echo "$SERVER_NAME_LINES" | \
grep -v "#" | \
awk '{for(i=2;i<=NF;i++) if($i!=";") print $i}' | \
sed 's/;//g' | \
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | \
grep -E '^[A-Za-z0-9.-]+$' | \
grep -vE '^(\*|localhost)$' | \
sort -u | \
tr '\n' ' ')
@@ -133,9 +144,9 @@ if [ -n "$DOMAINS" ]; then
sudo nginx -s stop
# 构建域名参数字符串
DOMAIN_ARGS=""
DOMAIN_ARGS=()
for domain in $DOMAINS; do
DOMAIN_ARGS="$DOMAIN_ARGS -d $domain"
DOMAIN_ARGS+=("-d" "$domain")
done
# 使用 certbot --nginx 插件安装证书
@@ -146,7 +157,7 @@ if [ -n "$DOMAINS" ]; then
--rsa-key-size 2048 \
--preferred-challenges http \
--force-renewal \
$DOMAIN_ARGS
"${DOMAIN_ARGS[@]}"
# 启动 Nginx 服务
echo "启动 Nginx 服务..."