2013-02-12 219 views
5

我想設置nginx作爲一個反向rpoxy服務器在前面關閉使用基本身份驗證進行身份驗證的幾個IIS Web服務器。Nginx反向代理 - 通過基本認證

(注 - 這是不一樣的nginx providing the auth using a password file - 它應該只是被marshelling瀏覽器/服務器之間everythnig)

它的工作種類 - 不過通過每一個資源得到反覆提示輸入身份驗證(圖片/ 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; 
    } 
} 

回答

5

這種確切的情況讓我永遠都不知所措,但OSS就像我猜測的那樣。這篇文章已經一歲了,所以也許原來的海報弄清楚了,還是放棄了?

反正對我來說,問題至少是造成了幾件事情:

  1. IIS預計境界字符串是相同什麼它發送到Nginx的,但如果你的Nginx服務器名是聽上一不同的地址比上游然後服務器端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"'; 
    } 
} 
+0

樓主確實放棄,而是試圖微軟的IIS應用程序請求路由(ARR)在處理Basic和NTML auth時沒有任何問題,但是導致了一些SharePoint 2013最小下載策略(MDS)中的一些非常奇怪的問題,我從來沒有做到這一點。 – Ryan 2013-11-01 12:19:34

+0

也許這可能會有所幫助:http://serverfault.com/questions/230749/how-to-use-nginx-to-proxy-to-a-host-requiring-authentication – czerasz 2014-10-10 10:26:21

+0

@matt你好,我需要通過像......用戶名:密碼,而不是領域=「等」這將仍然工作? – Jonathan 2016-08-22 22:14:29

0

我對nginx/1.10.3有這些相同的症狀。我有一個服務在基本身份驗證下得到保護,而nginx作爲客戶端和服務器之間的反向代理。要求是nginx會通過授權。

對服務器的第一次請求確實通過了授權標頭。第二個請求只是阻止了這個標題,這意味着客戶端只能在每個會話中發出一個請求。

這與Cookie有某種關係。如果我清除瀏覽器cookie,那麼重複這個循環。客戶端能夠進行身份驗證,但只是針對第一個請求。關閉瀏覽器具有相同的效果。

對我來說,解決辦法是從https更改上游服務器HTTP,使用:的

proxy_pass http://$upstream; 

代替:

proxy_pass https://$upstream;