2013-02-12 17 views
5

Próbuję skonfigurować serwer nginx jako serwer odwrotnego rpoxy z przodu kilku serwerów IIS, które uwierzytelniają się przy użyciu uwierzytelniania podstawowego.Serwer proxy odwrotnego Nginx - podstawowe uwierzytelnienie przejścia przez pasmo

(uwaga - to nie jest takie samo jak nginx providing the auth using a password file - powinien on być po prostu marshelling everythnig pomiędzy przeglądarką/serwer)

Jego praca rodzaj off - ale coraz kilkakrotnie poproszony o auth przez każdego zasobu (image/css itp.) na stronie.

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; 
    } 
} 

Odpowiedz

5

Ta dokładna sytuacja zajęła mi całą wieczność, ale system operacyjny jest taki, jak sądzę. Ten post ma rok, więc może oryginalny plakat go zrozumiał, czy zrezygnował?

Zresztą problem przynajmniej dla mnie było spowodowane przez kilka rzeczy:

  1. IIS oczekuje ciąg królestwo będzie to samo, co ona wysłana do Nginx, ale jeśli server_name Nginx nasłuchuje na inny adres niż na początku, a następnie serwer WWW-Authenticate nie będzie tym, czego oczekiwał IIS i go ignoruje.
  2. Wbudowany moduł nagłówka nie usuwa pozostałych nagłówków Uwierzytelniania WWW, w szczególności problematycznego uwierzytelniania WWW: Negocjuj. Korzystanie z nagłówków - dodatkowy moduł usuwa stare nagłówki i dodaje wszystko, co mu się powie.

Po tym, udało mi się w końcu przepchnąć Sharepoint 2010 przez Nginx.

Dzięki 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

Oryginalny plakat rzeczywiście zrezygnować i zamiast próbowali Microsoftu aplikacji IIS Request Routing (ARR), który obsługiwał uwierzytelnianie Basic i NTML bez żadnych problemów, ale spowodował kilka bardzo dziwnych problemów z niektórymi minimalnymi strategiami pobierania (MDS) programu SharePoint 2013, których nigdy nie doszedłem. – Ryan

+0

Może to być pomocne: http://serverfault.com/questions/230749/how-to-use-nginx-to-proxy-to-a-host-requiring- authentication – czerasz

+0

@matt Witam Muszę przekazać coś jak nazwa użytkownika: hasło zamiast dziedziny = "etc" będzie nadal działać? – Jonathan

0

Miałem takie same objawy z nginxem/1.10.3. Mam usługę zabezpieczoną w ramach podstawowego uwierzytelniania, a nginx jako odwrotne proxy między klientami a serwerem. Wymagało to, aby nginx przekazał autoryzację.

Pierwsze żądanie do serwera przeszło przez nagłówek Authorization. Druga prośba po prostu zablokowała ten nagłówek, co oznaczało, że klient mógł wykonać tylko jedno żądanie na sesję.

To było w jakiś sposób związane z plikami cookie. Jeśli wyczyściłem pliki cookie przeglądarki, cykl został powtórzony. Klient mógł uwierzytelnić, ale tylko na pierwsze żądanie. Zamknięcie przeglądarki miało taki sam efekt.

Rozwiązanie dla mnie było zmienić serwer nadrzędny od https do http, przy użyciu:

proxy_pass http://$upstream; 

zamiast:

proxy_pass https://$upstream; 
Powiązane problemy