2013-02-12 30 views
5

Tôi đang cố gắng thiết lập nginx như một máy chủ rpoxy ngược trước một số máy chủ web IIS đang xác thực bằng cách sử dụng xác thực cơ bản.Nginx reverse proxy - passthrough authenication cơ bản

(lưu ý - đây là không giống như nginx providing the auth using a password file - nó chỉ nên được marshelling everythnig giữa trình duyệt/server)

của nó làm việc loại bỏ - nhưng việc liên tục nhắc nhở cho auth bởi tất cả các tài nguyên duy nhất (hình ảnh/css vv) trên một trang.

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

Trả lời

5

Tình huống chính xác này khiến tôi mất nhiều thời gian để hiểu, nhưng OSS giống như tôi đoán. Bài đăng này là một năm cũ nên có thể áp phích gốc đã tìm ra hoặc bỏ cuộc?

Dù sao, vấn đề đối với tôi ít nhất là do một vài điều:

  1. IIS hy vọng chuỗi lĩnh vực để được giống như những gì nó gửi đến Nginx, nhưng nếu server_name Nginx bạn đang lắng nghe trên một địa chỉ khác với thượng nguồn thì phía máy chủ WWW-Authenticate sẽ không phải là thứ mà IIS mong đợi và bỏ qua nó.
  2. Mô-đun tiêu đề nội tuyến không xóa các tiêu đề WWW-Authenticate khác, đặc biệt là WWW-Authenticate: Negotiate. Sử dụng mô-đun tiêu đề nhiều hơn sẽ xóa các tiêu đề cũ và thêm bất cứ điều gì bạn nói.

Sau này, tôi đã có thể cuối cùng đẩy Sharepoint 2010 qua Nginx.

Thanks 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

Những poster ban đầu đã thực sự từ bỏ và thay vào đó cố gắng của Microsoft IIS Application Yêu cầu định tuyến (ARR) đã xử lý cơ bản và NTML auth mà không có bất kỳ vấn đề, nhưng gây ra một số vấn đề rất lạ với một số chiến lược tải xuống tối thiểu của SharePoint 2013 (MDS) mà tôi không bao giờ xuống đáy. – Ryan

+0

Có thể điều này có thể hữu ích: http://serverfault.com/questions/230749/how-to-use-nginx-to-proxy-to-a-host-requiring-authentication – czerasz

+0

@matt Xin chào tôi cần phải vượt qua sth như tên người dùng: mật khẩu thay vì realm = "etc" sẽ vẫn hoạt động? – Jonathan

0

Tôi có các triệu chứng tương tự với nginx/1.10.3. Tôi có một dịch vụ được bảo mật theo xác thực cơ bản, và nginx như một proxy ngược giữa các máy khách và máy chủ. Yêu cầu là nginx sẽ vượt qua sự ủy quyền.

Yêu cầu đầu tiên cho máy chủ đã vượt qua tiêu đề Cấp quyền. Yêu cầu thứ hai chỉ đơn giản là chặn tiêu đề này, có nghĩa là khách hàng chỉ có thể thực hiện một yêu cầu mỗi phiên.

Điều này liên quan đến cookie. Nếu tôi xóa cookie của trình duyệt thì chu kỳ lặp lại. Khách hàng đã có thể xác thực nhưng chỉ cho yêu cầu đầu tiên. Đóng trình duyệt có cùng tác dụng.

Các giải pháp đối với tôi là để thay đổi máy chủ thượng nguồn từ https đến http, sử dụng:

proxy_pass http://$upstream; 

thay vì:

proxy_pass https://$upstream; 
Các vấn đề liên quan