Request Tracker 6.0.3 配置参数详解

RT_SiteConfig.pm 核心参数逐项详解(RT 6.0.3):基础标识/数据库/日志/邮件网关/Web 安全六组参数的官方默认值、生产建议与实测验证,含 DatabaseType=MariaDB 坑与日志级别切换实测。

Request Tracker配置参数详解工单系统Perl2026/10/24

Request Tracker 6.0.3 配置参数详解

RT 的全部配置集中在 /opt/rt6/etc/RT_Config.pm(出厂默认,勿改)与 /opt/rt6/etc/RT_SiteConfig.pm(站点覆盖文件)中。本文按"基础标识 → 数据库 → 日志 → 邮件网关 → Web 与安全"分组讲解 RT 6.0.3 的核心参数,逐项给出官方默认值、生产建议与实测验证结果。参数名与默认值均核对自 6.0.3 源码树 etc/RT_Config.pm.in,实测基于《Request Tracker 6.0.3 安装指南》部署的环境(Ubuntu 22.04 + MariaDB + Apache mod_proxy_fcgi)。实测与查询日期:2026-10-24。

一、配置文件的加载机制

  • RT 启动时按顺序读取 RT_Config.pm(全量默认值)与 RT_SiteConfig.pm(站点覆盖),后者只需写要改的参数。
  • RT_SiteConfig.pm 必须以 1; 结尾(Perl 模块语法),且每次修改后需重启 Web 后端进程(systemd 场景即 systemctl restart rt-fcgi)才生效。
  • 语法自检命令(改完必跑,避免 Web 全站白屏):
perl -c /opt/rt6/etc/RT_SiteConfig.pm
# 实测输出:/opt/rt6/etc/RT_SiteConfig.pm syntax OK
  • Web 界面也可以核对当前生效值:以管理员登录 → Admin → Tools → Configuration,页面按分组展示全部运行时参数(与 SiteConfig 覆盖结果一致)。
  • 一个重要的语法习惯:Set( $Param, value ); 是 RT 提供的覆盖函数(内部处理追加/替换语义),不要直接写 $Param = value;。哈希/列表参数用 Set( %Param, key => value ); 或 Set( @Param, ... );。

二、基础标识与站点信息

参数官方默认说明与生产建议
$rtnameexample.com实例全名,用于邮件主题标签(如 [example.com #123])识别跨 RT 回信。一经使用不要随意改:改了之后旧邮件的主题标签将无法匹配(可用 $EmailSubjectTagRegex 兼容旧值,见官方 POD)。建议用组织主域名。
$Organizationexample.com内部组织标识,用于内部对象命名空间,一般与 $rtname 一致。
$WebDomainlocalhostRT 服务器的域名(仅主机名部分,不含协议/端口)。RT 用它做 Referer/host 校验,与本机实际访问域名不一致时会刷警告。实测:用 127.0.0.1 访问一台配置了 rt-server.example.com 的实例,日志出现 [warning]: The requested host (127.0.0.1) does NOT match the configured WebDomain (rt-server.example.com)。生产应配置为真实 FQDN。
$WebPort80RT 自感知的对外端口,用于拼接 $WebURL。反代部署下填对外端口(如 443)而非后端监听端口。
$WebPath""(空)RT 不部署在根路径时填写,如 /rt(前导 /、无尾 /)。子路径部署还需同步 Apache 的 ProxyFCGISetEnvIf "true" SCRIPT_NAME "/rt"(官方文档明示)。
$TimezoneAmerica/New_York默认时区,用户可自行覆盖。中国部署建议 Asia/Shanghai。实测:安装指南的站点配置中设置后生效,界面时间与数据库存储(UTC)转换正确。

三、数据库连接参数

参数官方默认说明与生产建议
$DatabaseType由 configure 注入运行时数据库类型,合法值 mysql / Pg / Oracle / SQLite(SQLite 仅测试用)。MariaDB 也写 mysql——这是安装实测中最大的坑:configure 用 --with-db-type=MariaDB(大写 M,只为装兼容驱动 DBD::mysql 4.x),运行时类型仍按 mysql 走(源码 lib/RT/Handle.pm 注释 "MySQL and MariaDB are both 'mysql' type")。写成 MariaDB 会导致 schema 文件(schema.mysql)找不到、SystemDSN 不去库名等连锁错误。
$DatabaseHostlocalhost数据库主机。MySQL/MariaDB 且同机时官方建议留空(走 socket,性能更好)。实测留空时 RT 走 mariadb.sock 正常连接。
$DatabasePort""留空即用数据库默认端口。
$DatabaseNamert4(configure 时按前缀生成)库名。本实验实测用 rt6。
$DatabaseUser / $DatabasePasswordconfigure 注入RT 日常连接账号(对应 GRANT ALL ON rt6.* 的 rt_user)。不是 DBA 账号。
$DatabaseAdmin / $DatabaseAdminPasswordroot / 空仅在 rt-setup-database 升级/初始化时使用的 DBA 账号。生产可在此填一个仅初始化时用的账号,日常 Web 进程不接触 DBA 权限。
%DatabaseExtraDSN()追加 DBI 连接属性。如 PostgreSQL 开 SSL:Set( %DatabaseExtraDSN, sslmode => 'require' );;MySQL/MariaDB:Set( %DatabaseExtraDSN, mysql_ssl => 1 );(官方 POD 示例)。
$DatabaseQueryTimeoutundef(禁用)单条 SQL 超时秒数(仅 MariaDB/MySQL/PostgreSQL 支持),应小于 Web 服务器超时。有长跑查询的 CLI 可用环境变量 RT_DATABASE_QUERY_TIMEOUT 临时覆盖(官方 POD 明示)。

四、日志参数(实测验证)

参数官方默认说明与生产建议
$LogToSyslog"info"走 syslog 的日志级别(debug/info/notice/warning/error/critical/alert/emergency,下同)。多进程直接写同一文件有竞争风险,官方 POD 明确推荐多用户场景用 syslog。
$LogToSTDERR"info"输出到 STDERR 的级别——CLI 脚本与 Web 的错误日志(apache error log)会收到这些输出。
$LogToFileundef(禁用)文件日志级别。设为 info/debug 等即启用。
$LogDirconfigure 注入(默认 /opt/rt6/var/log)文件日志目录,必须存在且 Web 进程用户可写。
$LogToFileNamedrt.log文件日志文件名。
$LogStackTraces""设为某级别后,该级别及以上的日志附栈回溯。官方警告栈里可能带密码/工单内容,仅排障时临时开。
$LogScripsForUser{}按 Scrip 输出日志到 Scrip 管理页(调试自动化规则利器),如 Set($LogScripsForUser, { 'root' => 'debug' });。

实测:将 $LogToFile 从 info 改为 debug 并 systemctl restart rt-fcgi 后,rt.log 立即出现 [debug] 级记录(本实验实测该文件由 27 行增至 32 行,新增 debug 行含 "The RTAddressRegexp option is not set" 提示——RT 主动提醒未配 $RTAddressRegexp 会带来额外 SQL 开销,与官方 POD 描述一致)。调试完毕记得改回 info。

五、邮件网关参数

5.1 实例身份地址

参数官方默认说明
$CorrespondAddress''(空)对外往来邮件(Reply/建单)默认 From/Reply-To 地址,需与 MTA 里 rt-mailgate 的别名对应;队列可覆盖。
$CommentAddress''(空)内部备注通道地址(如 rt-comment@example.com),同样按别名进 rt-mailgate。
$OwnerEmailroot"RT 的管理者"邮箱:邮件解析错误、循环告警等系统级错误发到这里。不能指向本 RT 自己管理的地址(防循环),不要发邮件可设 undef。
$RTAddressRegexpundefRT 自有地址的正则白名单(含队列外的别名),用于回信防循环检测。未配置时每次收信多一组 SQL 查询(实测 debug 日志可见 RT 的提示)。生产建议:Set($RTAddressRegexp, qr{^[a-z0-9_-]+@(example\.com)$}i); 并把所有 RT 使用的地址纳入。

5.2 收信行为

参数官方默认说明
$MaxAttachmentSize10*1024*1024(10 MiB)入站附件大小上限。超过的部分:不设其他参数则丢弃该附件。
$TruncateLongAttachmentsundef非空则超限附件截断保存(优先级高于 DropLongAttachments)。
$DropLongAttachmentsundef非空则静默丢弃超限附件。
$EmailSubjectTagRegex未设主题标签匹配正则。$rtname 变更后兼容旧标签:`Set($EmailSubjectTagRegex, qr/\Q$rtname\E
$RTAddressRegexpundef见上,防循环关键参数。
$CanonicalizeEmailAddressMatch / $CanonicalizeEmailAddressReplace'' / ''入站地址改写(如 @sub.example.com → @example.com),简单场景够用;复杂归一化用 LDAP 导入或覆写 RT::User::CanonicalizeEmailAddress。
$ValidateUserEmailAddresses1拒绝非法 Email 建用户。官方警告关闭有安全风险,保持 1。

5.3 发信行为

参数官方默认说明
$MailCommandsendmailpipe发信通道:sendmailpipe(经本地 MTA,支持 envelope 控制,推荐)、sendmail、qmail;调试用 mbox(全部发信落 /opt/rt6/var/ 下 mbox 文件,不出网)或 testfile(落 /tmp 随进程销毁)。实测安装指南即用 mbox 做无外发验证。
$SetOutgoingMailFrom0envelope sender:1 用队列 Correspond 地址;或直接给地址(支持 __TicketID__ 占位便于退信追踪,如 rt+bounce__TicketID__@example.com)。仅 sendmailpipe 生效。
$OverrideOutgoingMailFrom{}按队列覆盖 envelope:Set($OverrideOutgoingMailFrom, { Default => 'rt@example.com', General => 'help@example.com' });
$DefaultMailPrecedencebulk出信默认 Precedence 头(bulk 可帮部分 MTA 免自动回信)。
$UseFriendlyFromLine / $FriendlyFromLineFormat1 / "\"%s via RT\" <%s>"From 头显示名格式("张三 via RT rt@example.com")。
$UseOriginatorHeader1出信附 RT-Originator 头(事务创建者邮箱),便于溯源,保持默认。
$NotifyActor0触发动作的操作者本人是否也收通知(Scrip 通知抑制),默认不发给自己。
$RecordOutgoingEmail1出站邮件记录到工单历史,保持默认。

六、Web 界面与安全参数

参数官方默认说明
$WebBaseURL / $WebURL由 WebDomain/WebPort/WebPath 拼接实例完整 URL($WebURL 在 $WebBaseURL 基础上含 $WebPath)。反代 + HTTPS 部署务必核对拼出的值是否带 https://。
$WebSecureCookiesundef开启后会话 Cookie 加 Secure 标记(仅 HTTPS 下工作),HTTPS 部署必开。
$WebHttpOnlyCookies1Cookie 加 HttpOnly(JS 不可读),默认已防 XSS 偷 Cookie。
$WebSameSiteCookiesLaxSameSite 策略,Lax 兼容性最好;嵌入式 iframe 场景才考虑调整。
$RestrictReferrer1CSRF 防护(校验请求 Referer),保持开启;关闭需自担风险(官方标注不建议)。
$RestrictLoginReferrerundef是否同样限制登录页 Referer;默认关(用户可能从邮件直达登录页)。
$Framebustingundef防 iframe 嵌套(点击劫持),可开。
$StrictContentTypesundef严格 Content-Type 校验,配合反代加固可开。
$MinimumPasswordLength8本地密码最短长度。
$BcryptCost13密码 bcrypt 强度。登录每 +1 成本翻倍;默认 13 在现代 CPU 合理,过高会拖慢登录。
$WebSessionClassApache::Session::File(构建时注入)会话存储后端。多节点部署换数据库存储(如 Apache::Session::MySQL)或共享存储;注意无论哪种都要配合 sbin/rt-clean-sessions 定期清理。
$AutoLogoffundef空闲自动登出秒数(如 8*3600 = 8 小时)。
$DevelModeundef开发模式(详细报错/不缓存模板)。生产严禁开启(性能与信息泄露)。
$EnableREST21REST 2.0(JSON API)开关,关掉还能省内存。REST 1.0 不受此参数控制。
$EnableRSS / $EnableICal1 / 1每用户 RSS(/NoAuth/rss/)与 iCal(/NoAuth/iCal/)订阅端点开关;不用就关(减少凭据暴露面,RT 6.0.3 的安全公告也涉及 feed 端点)。

七、检索与界面行为参数(运维常用)

参数官方默认说明
$DefaultQueueGeneral新工单默认队列(建单页)。
$DefaultSummaryRows10工单摘要/搜索默认行数。
$UsernameFormatName(构建期默认)界面用户名显示格式(如 Name / EmailAddress / NameStr)。
$MaxFulltextAttachmentSize构建期注入全文检索索引的附件大小上限(需先 sbin/rt-setup-fulltext-index 建索引)。
$OnlySearchActiveTicketsInSimpleSearch1简单搜索默认只搜活跃工单。
$StatementLogundefSQL 语句日志(配合 DevelMode 调试用),生产关闭。
$ShowMobileSiteundef移动端专用页面开关(RT 6 UI 已响应式,一般不动)。

八、实测要点摘录

  1. 改配置必须重启后端:本实验修改 $LogToFile 后未重启时日志无变化;systemctl restart rt-fcgi 后 [debug] 记录立即出现(4.5 实测)。
  2. $WebDomain 与实际访问主机名不一致会刷警告:[warning]: The requested host (127.0.0.1) does NOT match the configured WebDomain (rt-server.example.com)——生产请让 DNS/hosts 与 $WebDomain 一致(实测日志)。
  3. $DatabaseType 写 MariaDB 会连环报错(schema 文件名、SystemDSN),正确写法 mysql,完整排障过程见《Request Tracker 6.0.3 安装指南》第八章 #3。
  4. $MailCommand = 'mbox' 是零风险试运行发信的开关:所有"发出"的邮件落 /opt/rt6/var/ 的 mbox 文件,可先跑通工单流再接真实 MTA(官方 POD 与安装实测一致)。
  5. 语法自检优先于重启:perl -c 不通过就重启,只会把问题从"配置错"扩大为"服务不可用"。

九、参考链接