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

Rya*_*yan 8 iis reverse-proxy nginx basic-authentication

我正在尝试将nginx设置为使用基本身份验证进行身份验证的几个IIS Web服务器之前的反向rpoxy服务器.

(注意 - 这与使用密码文件提供auth的nginx不同 - 它应该只是在浏览器/服务器之间进行marshelling everythnig)

它的工作类型 - 但在页面上的每个资源(图像/ css等)反复提示auth.

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

这种确切的情况让我想起了,但OSS就像我猜的那样.这篇帖子已经有一年了,所以也许原版海报想出来了,还是放弃了?

无论如何,对我来说问题至少是由一些事情引起的:

  1. IIS期望领域字符串与它发送给Nginx的字符串相同,但如果您的Nginx server_name正在侦听与上游不同的地址,那么服务器端WWW-Authenticate将不会是IIS所期望的并忽略它.
  2. 内置头模块不会清除其他WWW-Authenticate头,特别是有问题的WWW-Authenticate:Negotiate.使用headers-more模块清除旧标头,并添加您告诉它的任何内容.

在此之后,我终于通过Nginx推动了Sharepoint 2010.

谢谢stackoverflow.

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"';
    }
}
Run Code Online (Sandbox Code Playgroud)