Authentication 使用NGINX在前端和后端分离基本身份验证

Authentication 使用NGINX在前端和后端分离基本身份验证,authentication,nginx,proxy,http-headers,Authentication,Nginx,Proxy,Http Headers,因此,我尝试在客户端到代理之间使用SSL设置NGINX反向代理,从代理到实际服务器的通信是http 为了使事情复杂化,我需要使用NGINX上的基本Auth功能来验证访问站点的用户,然后再授予对后端服务器的访问权限。此外,后端服务器本身需要登录,这些值被硬编码到该VHost的配置文件中 问题是当两者都启用时,我实际上无法访问服务器,我被要求反复登录,并且永远无法访问该页面 如果我在后端禁用auth要求,并在前端启用它,那么一切正常,我可以登录并访问正确的页面。如果我禁用前端身份验证并启用后端身份验

因此,我尝试在客户端到代理之间使用SSL设置NGINX反向代理,从代理到实际服务器的通信是http

为了使事情复杂化,我需要使用NGINX上的基本Auth功能来验证访问站点的用户,然后再授予对后端服务器的访问权限。此外,后端服务器本身需要登录,这些值被硬编码到该VHost的配置文件中

问题是当两者都启用时,我实际上无法访问服务器,我被要求反复登录,并且永远无法访问该页面

如果我在后端禁用auth要求,并在前端启用它,那么一切正常,我可以登录并访问正确的页面。如果我禁用前端身份验证并启用后端身份验证,则会正确地通过该验证,并且一切正常

因此,我猜这与前端的授权信息有关,通过代理将其传送到后端,但由于这些凭据无效,因此无法正常工作

在VHosts位置设置中使用更多的\u clear\u标题重置它们之前,我尝试过清除授权标题,但尽管这似乎允许通过初始请求,但加载页面的其余标题再次点击授权块,我被要求登录

这是我当前的主机配置 (具体细节替换为#),有人能告诉我哪里出了问题吗

谢谢

server {

    # SSL configuration
    #
    listen 443;
    listen [::]:443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/#.pem;
    ssl_certificate_key /etc/letsencrypt/live/#.pem;
    access_log /var/log/nginx/#_access.log upstreamlog;
    server_name #.#.co.uk;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / {
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto https;
            more_clear_headers Authorization;
            proxy_set_header Authorization "Basic #####2V0Om5#####=";
            proxy_redirect off;
            proxy_pass http://10.0.1.201:9981;
    }
}

我也看到了这一点,并且还没有找到在使用反向代理时在两个连接上使用基本身份验证的方法。正如您所说,问题在于授权头被后端覆盖,然后被客户端用于连接到前端。如果直接通过http:
proxy\u pass发送http auth会怎么样http://user:passs@10.0.1.201:9981;?这只是添加了授权头,导致了问题中指出的问题。您是否为重写请求头而修改了
更多设置\u输入\u头“授权:基本#####2V0Om5#####=”
?如果它在反向代理身份验证之后运行,请检查它是否可以工作。请尝试添加
location/{Auth\u basic off;…}
,而不要更改其他行。来自nginx文档:“auth|u basic string | off;上下文:http、服务器、位置[…]特殊值off允许取消从上一配置级别继承的auth_basic指令的效果。”