WordPress 让自己的站点绕过代理
当代理常量对外生效、但发往站点自身的请求走了直连时,要考虑 WordPress HTTP API 的绕过规则。
WP_PROXY_HOST 和 WP_PROXY_PORT 已经设置。对外的 API 请求会经过代理,但返回 WordPress 自身主机名的请求不会。这可能是 HTTP API 有意设计的绕过策略。
WP_HTTP_Proxy 决定某个 URI 是否应该经过代理。它的默认逻辑会绕过 localhost 以及由站点已配置的 siteurl 推导出的主机名。这与单纯判断代理常量是否存在是两回事。
检查 WordPress 评估过的 URL
把被请求的主机名、已配置的站点 URL 和 WP_PROXY_BYPASS_HOSTS 放在一起看。发往公开主机名的请求和发往内部别名的请求,即便最终到达同一个应用,也可能做出不同判断。
WP_PROXY_BYPASS_HOSTS 增加一份配置好的主机排除列表。它并不是远端代理允许的目的地集合,也不能让本会被拦截的外部请求变得允许。
默认排除本站点可能是有用的:它可以避免把本地回环式的应用请求发到中间人那里。但如果某个安装的公开站点主机名只能通过某条特定批准的路径访问,就可能需要另做有意的决定。
在受支持的挂钩处改变判断
pre_http_send_through_proxy 过滤器可以覆盖按 URI 的判断。请把任何覆盖保持得足够窄,并与它要处理的主机或条件相匹配。对每个 URI 都返回同一个固定答案,会改变整个 HTTP API 的策略。
也要审查所选的传输方式。调用单独 SDK 或原生 PHP 网络函数的代码,并不会自动使用 WordPress 的 HTTP API 及其过滤器。
诊断这条路径时,请记录绕过判断,而不要公开倾倒完整的请求参数。它们可能包含 Cookie、账户信息和代理密钥。没有匹配请求的代理日志与绕过行为是相符的,但仅凭这一点不足以把它与从未发出的请求区分开。