Iis Nginx反向代理-直通基本身份验证

Iis Nginx反向代理-直通基本身份验证,iis,nginx,basic-authentication,reverse-proxy,Iis,Nginx,Basic Authentication,Reverse Proxy,我正在尝试将nginx设置为反向rpoxy服务器,位于使用基本身份验证进行身份验证的几个iisweb服务器的前面 (注意-这与-浏览器/服务器之间的所有内容都应该是相同的) 它的工作方式有点不正常,但是页面上的每一个资源(图像/css等)都会反复提示用户进行身份验证 upstream my_iis_server { server 192.168.1.10; } server { listen 1.1.1.1:80; server_name www.ex

我正在尝试将nginx设置为反向rpoxy服务器,位于使用基本身份验证进行身份验证的几个iisweb服务器的前面

(注意-这与-浏览器/服务器之间的所有内容都应该是相同的)

它的工作方式有点不正常,但是页面上的每一个资源(图像/css等)都会反复提示用户进行身份验证

upstream my_iis_server {
      server 192.168.1.10;
}

server {
    listen       1.1.1.1:80;
    server_name  www.example.com;  

    ## send request back to my iis server ##
    location / {
     proxy_pass  http://my_iis_server;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_http_version      1.1;
     proxy_set_header        Connection "";
     proxy_pass_header       Authorization;     
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

我花了很长时间才弄明白这个确切的情况,但我想OSS就是这样。这篇文章已经有一年了,所以可能是原来的海报发现了,还是放弃了

无论如何,对我来说,这个问题至少是由以下几点引起的:

  • IIS希望域字符串与它发送给Nginx的域字符串相同,但如果您的Nginx服务器\ u名称侦听的地址与上游地址不同,则服务器端WWW Authenticate将不是IIS所期望的,并忽略它
  • 内置头模块不会清除其他WWW Authenticate头,特别是有问题的WWW Authenticate:Negotiate头。使用HeadersMore模块清除旧的头,并添加您告诉它的任何内容
  • 在此之后,我终于能够通过Nginx推出sharepoint2010

    谢谢你

    server {
        listen 80;
        server_name your.site.com;
    
        location / {
                proxy_http_version      1.1;
                proxy_pass_request_headers on;
                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_header      Authorization; //This didnt work for me
                more_set_input_headers  'Authorization: $http_authorization';
    
                proxy_set_header  Accept-Encoding  "";
    
                proxy_pass              https://sharepoint/;
                proxy_redirect          default;
                #This is what worked for me, but you need the headers-more mod
                more_set_headers        -s 401 'WWW-Authenticate: Basic realm="intranet.example.com"';
        }
    }
    

    我在使用nginx/1.10.3时出现了这些相同的症状。我有一个基于基本身份验证的安全服务,nginx作为客户端和服务器之间的反向代理。要求nginx通过授权

    对服务器的第一个请求确实通过了授权头。第二个请求只是阻止了这个头,这意味着客户端在每个会话中只能发出一个请求

    这不知怎么地与饼干有关。如果我清除了浏览器cookies,那么循环就会重复。客户端能够进行身份验证,但仅限于第一个请求。关闭浏览器也有同样的效果

    我的解决方案是使用以下方法将上游服务器从https更改为http:

    proxy_pass http://$upstream;
    
    而不是:

    proxy_pass https://$upstream;
    

    最初的海报确实放弃了,而是尝试了Microsofts IIS应用程序请求路由(ARR),该路由确实可以毫无问题地处理Basic和NTML身份验证,但却在SharePoint 2013的一些最小下载策略(MDS)中引发了一些非常奇怪的问题也许这会有帮助:@matt Hi我需要传递诸如username:password而不是realm=“etc”这样的信息,这还能用吗?
    更多设置输入标题
    更多设置标题这些是什么?@deathangel908它们是来自标题更多模块的指令()可以使用nginx编译以添加更多功能。