概述 当 Drupal 在反向代理服务器(如 Varnish、Nginx)后方运行时,接收到的 Web 请求可能来自 localhost(127.0.0.1),而不是客户端的真实 IP 地址。为了确保系统安全,Drupal 默认会拒绝此类看似来自非预期主机的请求。 $settings['trusted_host_patterns'] 配置用于明确告知 Drupal 哪些主机名(域名)是合法的,允许其处理这些请求。这是一种重要的安全措施,可以防止 HTTP Host 头攻击。 配置方法 您需要在 Drupal 的配置文件 sites/default/settings.php 中设置 trusted_host_patterns。 步骤: 打开(或创建)文件: sites/default/settings.php 在文件末尾的 <?php 标签之后,添加以下配置代码。 配置示例 示例 1:单一固定域名 如果你的网站只使用一个域名,例如 www.example.com: php $settings['trusted_host_patterns'] = [ '^www\.example\.com$', ]; 示例 2:多个域名 如果你的网站可以通过多个域名访问,例如 example.com、www.example.com 和 sub.example.com: php $settings['trusted_host_patterns'] = [ '^example\.com$', '^www\.example\.com$', '^sub\.example\.com$', ]; 示例 3:匹配所有子域名 如果你希望允许任何子域名访问(适用于多站点开发环境),但主域名固定为 example.com: php $settings['trusted_host_patterns'] = [ '^.*\.example\.com$', '^example\.com$', ]; 示例 4:包含本地开发环境 在开发时,通常需要允许本地主机名(如 drupal.localhost)和 IP 地址(如 192.168.1.100)访问: php $settings['trusted_host_patterns'] = [ '^example\.com$', '^www\.example\.com$', '^drupal\.localhost$', '^192\.168\.1\.100$', ]; 配置语法说明 正则表达式: trusted_host_patterns 数组中的每个元素都是一个 正则表达式模式,用于匹配 HTTP 请求中的 Host 头。 起始与结束锚点: ^ 表示字符串的开始。 $ 表示字符串的结束。 使用 ^...$ 可以确保主机名必须与模式完全匹配,防止了 evil.example.com 匹配 example.com 的情况。 转义特殊字符: 域名中的点 . 在正则表达式中是通配符,所以必须使用反斜杠 \ 进行转义,写成 \. 才能表示实际的点字符。 故障排除 问题: 在配置后看到错误:“The provided host name is not valid for this server.” 原因与解决方案: 拼写错误: 检查配置中的域名是否拼写正确,并确保转义了所有点字符(例如 \.)。 遗漏域名: 确保将所有用于访问网站的域名(包括带 www 和不带 www 的版本)都添加到了配置数组中。 开发环境访问: 如果你使用特定的主机名或 IP 地址在本地开发,请务必将它们也添加到信任列表中。 开发环境快速配置(不推荐用于生产环境) 警告:此方法会禁用主机验证,存在安全风险,仅限本地开发使用。 如果出于开发目的,你想快速绕过这个检查,可以将以下代码添加到 settings.php 中: php $settings['trusted_host_patterns'] = ['^.*$']; 这个模式 ^.*$ 会匹配 任何 主机名,从而禁用此项安全功能。请切勿在生产环境中使用此配置。 自动化配置(Drupal 8.3.0+ 版本适用) 从 Drupal 8.3.0 开始,安装程序会尝试在安装过程中自动填充 trusted_host_patterns 设置。安装程序检测到的主机名会被自动添加到 settings.php 文件中。 然而,在后续维护中(例如添加新域名),你仍然可能需要按照上述指南手动编辑此配置。
Drupal 受信任主机配置指南
概述
当 Drupal 在反向代理服务器(如 Varnish、Nginx)后方运行时,接收到的 Web 请求可能来自
localhost(127.0.0.1),而不是客户端的真实 IP 地址。为了确保系统安全,Drupal 默认会拒绝此类看似来自非预期主机的请求。$settings['trusted_host_patterns']配置用于明确告知 Drupal 哪些主机名(域名)是合法的,允许其处理这些请求。这是一种重要的安全措施,可以防止 HTTP Host 头攻击。配置方法
您需要在 Drupal 的配置文件
sites/default/settings.php中设置trusted_host_patterns。步骤:
sites/default/settings.php<?php标签之后,添加以下配置代码。配置示例
示例 1:单一固定域名
如果你的网站只使用一个域名,例如
www.example.com:php
示例 2:多个域名
如果你的网站可以通过多个域名访问,例如
example.com、www.example.com和sub.example.com:php
示例 3:匹配所有子域名
如果你希望允许任何子域名访问(适用于多站点开发环境),但主域名固定为
example.com:php
示例 4:包含本地开发环境
在开发时,通常需要允许本地主机名(如
drupal.localhost)和 IP 地址(如192.168.1.100)访问:php
配置语法说明
trusted_host_patterns数组中的每个元素都是一个 正则表达式模式,用于匹配 HTTP 请求中的Host头。^表示字符串的开始。$表示字符串的结束。^...$可以确保主机名必须与模式完全匹配,防止了evil.example.com匹配example.com的情况。.在正则表达式中是通配符,所以必须使用反斜杠\进行转义,写成\.才能表示实际的点字符。故障排除
问题: 在配置后看到错误:“The provided host name is not valid for this server.”
原因与解决方案:
\.)。www和不带www的版本)都添加到了配置数组中。开发环境快速配置(不推荐用于生产环境)
警告:此方法会禁用主机验证,存在安全风险,仅限本地开发使用。
如果出于开发目的,你想快速绕过这个检查,可以将以下代码添加到
settings.php中:php
这个模式
^.*$会匹配 任何 主机名,从而禁用此项安全功能。请切勿在生产环境中使用此配置。自动化配置(Drupal 8.3.0+ 版本适用)
从 Drupal 8.3.0 开始,安装程序会尝试在安装过程中自动填充
trusted_host_patterns设置。安装程序检测到的主机名会被自动添加到settings.php文件中。然而,在后续维护中(例如添加新域名),你仍然可能需要按照上述指南手动编辑此配置。