如何告诉 Apache httpd 2.4.6 不要代理特定路径?

如何告诉 Apache httpd 2.4.6 不要代理特定路径?

我正在使用 apache 反向代理 Rundeck。Rundeck 有一个可在 访问的 API rundeck.dns/api/,以及一个可在 访问的 Web UI rundeck.dns/{long list of other possible paths, such as user,menu,project}

作为反向代理的一部分,我连接到 RedHat SSO 服务器以将用户标头传递给 rundeck。这用于连接到 UI。访问 API 时,我在 URL 中使用之前生成的 authtoken。因此,我需要 apache 完全不代理我的 /api 路径。我尝试了多种配置,包括 LocationMatch,但均无结果。我当前的配置允许 UI 访问,但 API 失败,并告诉我:“很抱歉,未设置 Kerberos。您无法登录。”值得注意的是,我没有在任何地方配置 kerberos,并且此错误可能不是 apache 错误,而是 rundeck 或 RHSSO 问题,但由于 Rundeck 未配置任何提及 kerberos 的内容,我假设我只是在 apache 中犯了一个错误。我的 site.conf 中当前的相关配置是:

<Location />
AuthType openid-connect
  require valid-user

RequestHeader set "X-Forwarded-User" %{REMOTE_USER}s

ProxyPass http://{rundeck IP}
ProxyPassReverse http://{rundeck IP}
</Location>

<Location /api>
</Location>

我尝试将 添加!到 /api 的新 ProxyPass 中,但无法在 内设置<Location>。在 外部设置时<Location>,我收到“参数必须采用‘key=value’格式”。

谢谢!

答案1

我相信之前在很多地方都已经提到过,但是,要对代理做出例外,只需在 proxypass 指令末尾附加一个 !,而不是指定目标:

ProxyPass /path !

PS:最好不要将 ProxyPass 指令放在 Location 指令内,这会使事情复杂化(Location、ProxyPass 指令的解释顺序相反,并且 proxypass 的第一个参数已经可以是一个位置,所以为什么要使它复杂化)

相关内容