如何让 nginx 正确代理(包括在标题中设置的基本身份验证凭据)Apache?

如何让 nginx 正确代理(包括在标题中设置的基本身份验证凭据)Apache?

编辑:如果您对如何改进问题或缺少哪些细节有想法,请发表评论。

预期结果:

我正在尝试将 nginx 部署为反向代理,以便让我公开 Apache 提供的文件,而无需提供 Apache 所需的基本身份验证凭据。我的计划是在从代理发送到 Apache 的标头中“静态”提供基本身份验证凭据,以便用户无需拥有(或看到/知道)凭据即可访问文件。

设置:

Apache 需要通过 https 进行基本身份验证。要部署的反向代理本身由处理传入 (docker) 主机的流量的 nginx 代理。(docker) 主机入口 nginx 仅侦听 443,(docker) 主机上/内的流量为 http。

因此设置如下:

https >> [dockerhost ingress nginx] >> http >> [nginx reverse proxy] >> https >> [apache file server (basic auth)]

我使用的是最新的 nginx docker 镜像,未做任何修改(只添加了配置文件)。对于 dockerhost 入口代理,我使用的是https://github.com/jwilder/nginx-proxy。Apache 正在从Hetzner 储物盒。我无法查看或更改其配置,Hetzner 说他们无法帮助我,因为他们不正式支持这种设置。他们最后的回复是:

我们的 Apache 不需要任何特定的标头。所有必需的都是通过正确的主机名(因为 SNI)发出的请求以及通过端口 443 上的 SLL/HTTPS 发出的正确凭据。

问题:

直接地,不需要 nginx 代理,我可以在浏览器中或通过 curl 通过基本身份验证提示后访问 Apache 上的文件。

当我尝试通过代理访问文件并尝试将凭据“静态地”作为 nginx 配置中的标头传递时,我只得到 404(来自 Apache)。

但是我可以(这让我很困惑)在代理时通过代理访问文件,而无需“静态”基本身份验证,只需在提示符下提供我的凭据即可。

因此,它似乎通过了基本身份验证,但无法访问任何文件,这让我感到困惑。

我尝试过的:

我最初的做法是使用@Shai 在这里提供的位置块:如何使用nginx代理到需要身份验证的主机?

location / {
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://6.6.6.6:80;
  proxy_set_header Authorization "Basic a2luZzppc25ha2Vk"; 
}

但这会产生上述行为。从那时起,我只是开始尝试注释掉并添加不同的指令(例如这里提供的指令:如何让 nginx 将 HTTP_AUTHORIZATION 标头传递给 Apache),但无济于事。

我非常感谢任何指点。

干杯,威尔

答案1

尝试使用显式凭据进行代理:

proxy_pass http://user:[email protected]:80;

相关内容