Apache 反向代理未将自定义标头传递给目标服务器

Apache 反向代理未将自定义标头传递给目标服务器

我已将 Apache 配置为 PostGraphile 服务的反向代理。我的想法是使用 Apache 进行 Kerberos 身份验证,然后使经过身份验证的用户可以使用 PostGraphile 服务。

我还需要向该服务传递一些自定义标头。

此时,我可以启用 Kerberos 身份验证或传递标头。一旦我启用身份验证,服务端就不会出现标头。

这是我的虚拟主机配置:

<VirtualHost *:80>
  <Location />
    AuthType Kerberos
    AuthName "Kerberos Authentication"
    KrbAuthRealsm MY.REALM
    KrbServiceName HTTP

    BrowseMatch Windows gssapi-no-negotiate
    KrbMethodNegotiate on

    KrbMethodK5Passwd off

    Krb5Keytab /path/to/keytab.keytab

    # require valid-user # with this line uncomented headers defined later do not appear on service side
    require all granted # with this line uncommented headers defined later do appear on service side however any user can access the service

    ProxyPass 'http://my.service:5000'
    ProxyPassReverse 'http://my.service:5000'
  </Location>
  <Proxy *>
    Order Deny,Allow
    Deny from all
    Allow from local.ip.range
  </Proxy>

  RequestHeader set MYCUSTOMHEADER foo
</VirtualHost>

我没什么主意了。

我一直在阅读 Apache 文档、auth_mode_kerb 文档、堆栈线程和博客,但似乎我在这里遇到了一些奇怪的错误或缺少了一些基本的东西......

任何提示都会非常受欢迎

答案1

经过试验,我终于找到了满足我需求的解决方案,但我必须承认,我不知道为什么它会按照看起来的方式工作。

如果我在配置中添加以下内容,我就可以在Authorization标题中传递我需要的信息。

RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule .* - [E=RU:%1]
RequestHeader add Authorization %{RU}e

但是其他自定义标题仍然没有出现,这对我来说仍然是一个谜。


编辑:

经过进一步的调整,我发现只要我覆盖授权标头,我的自定义标头也会显示出来。如果能了解这是预期行为(可能是安全功能)还是 mod-auth-kerb 中的错误,那就太好了。


编辑2:

两年后,有人指出我可能在配置中出现了拼写错误:

KrbAuthRealsm MY.REALM

我无法检查这一点,因为我无法访问我当时正在使用的原始系统。而且我甚至无法对那个人说谢谢,因为在指出拼写错误后,那个人删除了一条评论……

相关内容