Apache VCL 配置参数详解

逐项实测解析 Apache VCL 2.5.2 的四层配置参数——secrets.php 连接与密钥、conf.php 前端常量、vcld.conf 管理节点参数与 variable 数据库运行时键值。

Apache VCLApache VCLPHPMySQLUbuntu 22.04Linux2026/10/16

Apache VCL 配置参数详解

目标:把 Apache VCL 2.5.2 分散在四个层面的配置参数(Web 密钥文件 secrets.php、前端常量 conf.php、管理节点配置 vcld.conf、数据库运行时参数 variable 表)逐项讲清含义、默认值与实测生效情况。全部参数说明均在 Ubuntu 22.04.5 + VCL 2.5.2 + MySQL 8.0.46 环境实测验证。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Apache VCL:2.5.2(源码解压于 /root/apache-VCL-2.5.2,Web 代码 /var/www/html/vcl-2.5.2,管理节点 /usr/local/vcl-2.5.2)
  • 数据库:MySQL 8.0.46;Web:Apache 2.4.52 + PHP 7.4.33;Perl:5.34.0
  • 部署形态:三组件单机合一
  • 本篇测试的配置文件均为安装后的真实文件(详见《Ubuntu 22.04 安装 Apache VCL 指南》)

二、前置条件

本篇是配置详解篇,不重复安装步骤,但要求读者环境满足以下条件(每项附实测验证命令):

  1. VCL 已安装且 Web 层可访问:
curl -sk -o /dev/null -w "HTTP_CODE=%{http_code}\n" https://localhost/vcl/index.php

实测输出:

HTTP_CODE=302

(302 是未登录时跳转认证选择页的正常响应。)

  1. vcld 守护进程可启停:
systemctl is-active vcld

实测输出:

active
  1. 能连上 MySQL 的 vcl 库(查看 variable 表参数要用):
mysql -N vcl -e "SELECT COUNT(*) FROM variable;"

实测输出:

35

三、参数查看与修改方式

VCL 的配置分散在四个层面,修改方法、生效方式各不相同,先给总览再逐层展开。

层面文件/位置语法生效方式
密钥层/var/www/html/vcl/.ht-inc/secrets.phpPHP 变量systemctl restart apache2
前端层/var/www/html/vcl/.ht-inc/conf.phpPHP define 常量systemctl restart apache2
管理节点层/etc/vcl/vcld.confkey=valuesystemctl restart vcld
运行时层数据库 vcl.variable 表键值行即时(代码每次读取)

三点实测确认的规则:

  • secrets.php 与 conf.php 改完必须通过 php -l 语法检查,否则整个站点白屏/500:
php -l /var/www/html/vcl/.ht-inc/conf.php

实测输出:

No syntax errors detected in /var/www/html/vcl/.ht-inc/conf.php
  • vcld.conf 的官方样例在 /usr/local/vcl/etc/vcl/vcld.conf(安装时复制到 /etc/vcl),conf 的官方注释样例在 .ht-inc/conf-default.php;升级版本后可 diff 这两个样例找回新增参数。
  • vcld 启动时只读一次 vcld.conf,改完必须重启守护进程;variable 表则相反,代码每次调用 get_variable() 实时读取,改库即生效(实测日志可见其运行时读取行为):
2026-10-16 04:22:01|32243|||vcld|utils.pm:get_variable|12918|variable 'cluster_inuse_check' is not set in the database

💡 技术拓展:应用配置的存放位置常见三种做法——配置文件(conf.php/vcld.conf,改后需重启)、数据库表(VCL 的 variable 表,即时生效)、环境变量(VCL 未采用)。VCL 混用前两种的取舍是:连接信息、加密根密钥等"启动前就必须有"的放文件;超时阈值、提示文案、NAT 端口段等"运营期常调"的放数据库,管理员在 Web 后台即可修改而无需动服务器。

四、参数总览

各层面参数数量与关键参数速查(均为实测环境的真实值):

层面参数量最关键参数
secrets.php6$vclpassword、$cryptkey、$pemkey
conf.php30+ 个 defineHELPURL/HELPEMAIL/ERROREMAIL/ENVELOPESENDER、DAYSAHEAD、SEMTIMEOUT、QUERYLOGGING
vcld.conf21 个键FQDN、server、wrtPass、xmlrpc_url、xmlrpc_pass
variable 表35 行acknowledgetimeout、initialconnecttimeout、natport_ranges、timesource|global

关键差异解读:secrets.php 是"改错即全站瘫痪"的最高危文件;conf.php 与 vcld.conf 分管前端与管理节点两侧行为;variable 表是运营期调参入口。四层互不重叠,改参数前先确认它属于哪一层。

五、核心参数分类详解

5.1 secrets.php(Web 密钥层,6 个参数)

位置:/var/www/html/vcl/.ht-inc/secrets.php(从 secrets-default.php 复制而来)。实测文件内容(密钥为本环境生成值):

$vclhost = 'localhost'; # name of mysql server
$vcldb = 'vcl';         # name of mysql database
$vclusername = 'vcluser';      # username to access database
$vclpassword = 'q1w2e3r4';      # password to access database

$cryptkey = 'eAQ6lPbdbRBnWwSAn+dpD+h5oc73groOdwi4iQrNQEw=';

$pemkey = 'eaa8Ouy7U1KuWqpGgBXN7S87enBxsUOUu3X62q3FnHGYXW3R4ySD8Nl4CubSjaDw';

逐项说明:

参数含义实测说明
$vclhost数据库服务器地址单机部署填 localhost;Web 与数据库分离时填数据库服务器主机名
$vcldb库名官方固定为 vcl
$vclusername连接账号与 GRANT 授权一致(vcluser),权限仅需 SELECT/INSERT/UPDATE/DELETE/CREATE TEMPORARY TABLES
$vclpassword连接密码改此文件即改 Web 侧密码;数据库侧用 ALTER USER 同步修改,两边必须一致
$cryptkey对称加密根密钥生成命令 openssl rand 32 | base64;用于加密库中敏感字段,部署后不可更改
$pemkeyRSA 私钥口令生成命令 openssl rand -base64 48;genkeys.sh 用它加密生成 keys.pem,部署后不可更改

验证生效:改错任何一个值(比如密码打错)时 testsetup 自检与登录会直接失败;正确的验证是登录页 302 跳转正常且 /vcl/testsetup.php 报 successfully included .ht-inc/conf.php(实测回显见《Ubuntu 22.04 安装 Apache VCL 指南》4.2 节)。

5.2 conf.php(前端常量层)

位置:/var/www/html/vcl/.ht-inc/conf.php(从 conf-default.php 复制)。官方在文件头部标注了 Things in this section must be modified/reviewed 必审区。以下按功能分组列出实测确认的参数(默认值取自 conf-default.php,实测值来自本环境修改后的 conf.php):

5.2.1 邮件与帮助链接(必审区,4 个)

参数默认值含义与实测
HELPURLhttps://vcl.example.org/help/导航区 Help 链接指向;实测改为 https://vcl.apache.org/docs/
HELPEMAILvcl_help@example.org页面异常时提示用户可求助的邮箱;实测 admin@example.org
ERROREMAILwebmaster@example.org程序异常告警收件邮箱;实测 admin@example.org(未配邮件服务器时 journalctl 可见 sendmail 投递失败记录)
ENVELOPESENDERwebserver@example.org发信信封地址;实测 vcl-web@example.org

5.2.2 URL 与站点行为

参数默认值含义与实测
SSLOFFLOAD0是否由外部负载均衡终结 SSL;1 时 BASEURL 强制写 https 不再要求 Apache 配证书
BASEURLhttps://{$_SERVER['HTTP_HOST']}/vcl站点根 URL(不含尾斜杠);改子路径部署时需同步改
SCRIPT/index.php入口脚本名,官方要求不要改
HOMEURLhttps://{$_SERVER['HTTP_HOST']}/vcl/点 HOME/Logout 后的跳转地址
COOKIEDOMAIN$hostCookie 作用域,默认取访问主机名;实测自检页报告 COOKIEDOMAIN (vcl-server) appears to be set correctly
DEFAULTTHEME'default'登录页与维护模式主题;可选 themes/ 目录下 default、dropdownmenus(实测两主题目录均存在)
DEFAULTLOCALEen_US默认界面语言;登录页实测提供 en_US、es_CR、es_MX、fr_CA、ja_JP、pt_PT、zh_CN 七种

5.2.3 调度与预约约束

参数默认值含义与实测
DAYSAHEAD4允许预约"今天起多少天内"的资源;实测确认在 conf.php 第 75 行 define("DAYSAHEAD", 4);
SEMTIMEOUT"45"信号量等待秒数(字符串类型,注意引号);实测第 91 行
PRIV_CACHE_TIMEOUT15会话内权限缓存刷新间隔(分钟)
MIN_BLOCK_MACHINES / MAX_BLOCK_MACHINES1 / 70块预约机器数下限/上限
MAXINITIALIMAGINGTIME720制作镜像类预约的最大可选时长(分钟)
MAXSUBIMAGES5000配置类环境中子镜像数量上限
DEFAULT_AFFILID1默认认证域 id(1=Local,与 user.affiliationid 对应)
DEFAULTGROUPadminUsers用户无组时的默认组
SCHEDULER_ALLOCATE_RANDOM_COMPUTER01=调度时随机选机;与 variable 表调度模块配合使用

5.2.4 调试与日志

参数默认值含义与实测
ONLINEDEBUG11=错误直接显示在页面(便于初次部署排障),0=只发邮件;生产建议 0
QUERYLOGGING1记录 SQL 查询日志开关
XMLRPCLOGGING1记录 XML-RPC 调用日志开关
NOAUTH_HOMENAV0未登录首页是否显示导航

5.2.5 界面细节

参数默认值含义
USEFILTERINGSELECT1下拉框用 Dojo 过滤选择器(大列表可搜索)
FILTERINGSELECTTHRESHOLD1000超过该数量才启用过滤选择器
DOCUMENTATIONURL官方 cwiki 地址帮助文档外链
HELPFAQURLhttp://vcl.example.org/help-faq/FAQ 外链
ALLOWADDSHIBUSERS0Shibboleth 场景自动建用户开关

验证生效方式(改完重启 Apache 后实测):

systemctl restart apache2
systemctl is-active apache2

实测输出:

active

5.3 vcld.conf(管理节点层,21 个键)

位置:/etc/vcl/vcld.conf。实测环境的完整生效行(即安装时 sed 填值后的状态):

FQDN=vcl-server
processname=vcld
log=/var/log/vcld.log
pidfile=/var/run/vcld.pid
database=vcl
server=localhost
LockerWrtUser=vcluser
wrtPass=q1w2e3r4
xmlrpc_username=vclsystem@Local
xmlrpc_pass=insecureDefault
xmlrpc_url=https://localhost/vcl/index.php?mode=xmlrpccall
enable_mysql_ssl=no
mysql_ssl_cert=/etc/vcl/cert/my_ca.crt
RETURNPATH=
jabber=no
jabServer=your.jabber.com
jabPort=5222
jabUser=vcl
jabPass=
jabResource=vcl
WINDOWS_ROOT_PASSWORD=cl0udy

逐项说明:

参数默认值含义与实测
FQDN(空)本管理节点主机名,必须与数据库 managementnode.hostname 一致;实测 vcl-server,不一致时 get_management_node_info 查不到记录直接启动失败
processnamevcld进程名(vcld 启动后会把进程名改为 vcld,实测 ps 可见)
log/var/log/vcld.log守护进程主日志路径
pidfile/var/run/vcld.pidPID 文件路径(systemd 单元 PIDFile 与之对应)
databasevcl数据库名
server(空)数据库服务器地址;实测填 localhost
LockerWrtUservcluser数据库账号(与 secrets.php 的 $vclusername 对应)
wrtPass(空)数据库密码;实测 q1w2e3r4
xmlrpc_usernamevclsystem@Local调用 Web XML-RPC 接口的平台账号
xmlrpc_passinsecureDefault上述账号密码;生产必须在 Web 后台改掉 vclsystem 密码并同步此处(实测默认值能通过 Schema 校验,安全上必须更换)
xmlrpc_url(空)XML-RPC 端点;实测 https://localhost/vcl/index.php?mode=xmlrpccall(官方 Web 代码中 XML-RPC 模式即 index.php 的 xmlrpccall 模式)
enable_mysql_sslno到数据库的连接是否走 SSL;默认 no
mysql_ssl_cert/etc/vcl/cert/my_ca.crt启用 SSL 时的 CA 证书路径
RETURNPATH(空)通知邮件的退信地址;留空则用发件地址
jabberno是否启用 Jabber 消息通知;实测保持 no
jabServer/jabPort/jabUser/jabPass/jabResourceyour.jabber.com/5222/vcl/(空)/vclJabber 服务器五件套,jabber=no 时无需配置
WINDOWS_ROOT_PASSWORDcl0udy部署 Windows 镜像时注入的 Windows Administrator 密码;生产必须改(样例值属于官方源码自带,不是本环境设定)

验证生效:改完执行 systemctl restart vcld,然后看日志确认配置读取成功:

systemctl restart vcld && sleep 10 && systemctl is-active vcld
grep "retrieved management node information" /var/log/vcld.log | tail -1

实测输出:

active
2026-10-16 04:22:01|32244|||vcld|vcld:main|120|retrieved management node information from database

另有一个配套文件 /etc/sysconfig/vcld(systemd 单元 EnvironmentFile 引用),实测内容只有一行 OPTIONS="-v",-v 即 verbose 模式;不想要详细日志可删掉 -v。

5.4 variable 表(数据库运行时层,35 行)

VCL 把"运营期常调"的参数放在 variable 表,Web 后台与 vcld 都实时读写。实测导出本环境全部数值型键值(消息模板类键值略):

mysql -N vcl -e "SELECT name, value FROM variable WHERE name NOT LIKE 'adminmessage%' AND name NOT LIKE 'usermessage%';"

实测输出(节选):

acknowledgetimeout      900
general_end_notice_first        600
general_end_notice_second       300
general_inuse_check     300
ignore_connections_gte  1440
initialconnecttimeout   900
natport_ranges  5700-6500,9696-9701,49152-65535
reconnecttimeout        900
schema-version  1
server_inuse_check      900
timesource|global       time.nist.gov,time-a.nist.gov,time-b.nist.gov,time
user_password_length    8
user_password_spchar    0
windows_ignore_users    Administrator,cyg_server,root,sshd,Guest
xcat|rpower_error_limit 3
xcat|timeout_error_limit        5

逐项说明(核心键):

键实测值含义
acknowledgetimeout900预约就绪后用户须在 900 秒内点 Connect 确认,超时释放资源
initialconnecttimeout900用户首次连接的宽限时长(秒),超时未连上即回收
reconnecttimeout900断线重连宽限(秒)
general_end_notice_first/second600/300预约到期前 600 秒/300 秒各发一次提醒邮件
general_inuse_check / server_inuse_check300/900在用检查间隔(秒):检测用户是否还在使用
ignore_connections_gte1440连接时长超过 1440 分钟(24 小时)的忽略在用检查
natport_ranges5700-6500,9696-9701,49152-65535NAT 模式下可分配的端口段
timesource|globaltime.nist.gov,...镜像/节点校时 NTP 源
user_password_length / user_password_spchar8/0平台生成密码的长度与是否强制特殊字符
windows_ignore_usersAdministrator,cyg_server,root,sshd,Guest重置 Windows 节点时保留的用户列表
xcat|rpower_error_limit / xcat|timeout_error_limit3/5xCAT 供电/超时连续错误阈值
schema-version1数据库结构版本号(升级脚本依据,勿手改)

修改与生效验证(改 acknowledgedgetimeout 为例,改库即时生效):

mysql vcl -e "UPDATE variable SET value='600' WHERE name='acknowledgetimeout';"
mysql -N vcl -e "SELECT value FROM variable WHERE name='acknowledgetimeout';"

实测输出:

600

六、生产配置模板

适用场景:16GB 内存、4 核、数百人规模的院系级 VCL(三组件单机合一,计算节点另接)。

// conf.php 建议值(仅列与默认不同项)
define("ONLINEDEBUG", 0);          // 错误不外显,走邮件告警
define("ERROREMAIL", "vcl-admin@example.edu");   // 实际运维邮箱
define("DAYSAHEAD", 14);           // 可预约窗口放宽到两周
define("PRIV_CACHE_TIMEOUT", 30);  // 权限缓存 30 分钟,降低 DB 压力
define("QUERYLOGGING", 0);         // 关闭 SQL 日志,减少写放大
define("XMLRPCLOGGING", 0);
# /etc/vcl/vcld.conf 建议值(仅列与默认不同项)
xmlrpc_pass=Xr9pL2vQ7sT4wZ8m   # 示例值:先在 Web 后台重置 vclsystem 用户密码,再把同一强口令同步到此,切勿保留 insecureDefault
RETURNPATH=vcl-bounce@example.edu
WINDOWS_ROOT_PASSWORD=VclWin2026#Lab   # 示例值:按本校口令策略另行生成

⚠️ 注意:模板中的两处口令均为示例值,仅用于展示填写格式,部署时必须现场生成强口令替换;其余建议项可直接采用。内存充裕时 conf.php 无需内存相关参数——VCL 前端是典型 IO 密集型 PHP 应用,资源瓶颈通常在数据库与镜像存储而非 PHP 内存。

七、常见问题(FAQ)

Q1:改完 conf.php 站点直接 500? 先跑 php -l /var/www/html/vcl/.ht-inc/conf.php(实测正常输出 No syntax errors detected);若是漏了分号或引号,php -l 会给出精确行号。修好后再重启 Apache。

Q2:改了 vcld.conf 但行为没变? vcld 只在启动时读配置,必须 systemctl restart vcld;同时确认改的是 /etc/vcl/vcld.conf 而不是源码目录里的样例文件 /usr/local/vcl/etc/vcl/vcld.conf。

Q3:variable 表里改了 message 模板没生效? 模板键(usermessage|...、adminmessage|...)的值是多行文本,Web 后台编辑入口在 Manage → Defaults(错误与通知模板区);直接改库时注意保留 YAML 风格的多行格式(实测值以 --- message: | 开头),格式破坏会导致通知发送失败。

Q4:FQDN 与数据库不一致会怎样? 实测 vcld 启动即失败:get_management_node_info 按 FQDN 查 managementnode 表,查不到就返回空导致守护进程退出(错误路径见《Ubuntu 22.04 安装 Apache VCL 指南》九、Q9)。主机名变更后必须同步更新 vcld.conf 的 FQDN 与 managementnode.hostname 两处。

Q5:cryptkey 丢了怎么办? 无解——库中被对称加密的数据(用户密码哈希以外的敏感字段)将无法解密。唯一正确做法是部署当天离线备份 secrets.php 与 keys.pem。

八、参考链接

  • VCL 2.5.2 官方安装指南(conf.php 必审区来源):https://vcl.apache.org/docs/VCL252InstallGuide.html
  • 参数样例文件(随源码发布):web/.ht-inc/conf-default.php、managementnode/etc/vcl/vcld.conf
  • 安装过程与各文件产生方式:《Ubuntu 22.04 安装 Apache VCL 指南》
  • 日志位置与巡检方法:《Apache VCL 日常运维手册》