2013-10-14 16 views
13

Tôi muốn sử dụng auth_request để đặt tiêu đề theo yêu cầu xác thực thành công và sau đó chuyển tiêu đề đó tới dòng nội tuyến proxy tiếp theo sẽ xử lý yêu cầu thực tế.Đặt tiêu đề bằng NGINX auth_request proxy

Tôi đã thiết lập NGINX và các proxy khác nhau để làm việc của họ, tuy nhiên tôi không chắc chắn cách đặt tiêu đề từ máy chủ (biểu đồ AUTH PROXY) mà tôi đang sử dụng cho yêu cầu xác thực sao cho tiêu đề đó được chuyển đến máy chủ tiếp theo (backend sERVER trong sơ đồ)

NGINX ---- auth request ----> AUTH PROXY 
            | 
    |  <---  201 <------ SUCCESS 
    | 
    ----> underlying request ----> BACKEND SERVER 

nginx cấu hình của tôi trông giống như

server {              
    listen     9123;        
    resolver     10.3.0.2;       
    resolver_timeout   30;        

    location/{            
     auth_request  /_auth;        
     proxy_set_header x-user $http_x_user;     
     proxy_pass  http://backend_server;     
    }               

    location = /_auth {          
     internal;            
     proxy_pass https://auth;   
     proxy_pass_request_body off;       
     proxy_set_header Content-Length "";      
     proxy_set_header X-Original-URI $request_uri; 
    }                                
}                

Khi tôi thực hiện yêu cầu thực tế tôi thấy sau trong nginx bản ghi gỡ lỗi (đây là phần của phản hồi từ máy chủ auth):

2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Content-Type: text/html; charset=utf-8"  
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Date: Mon, 14 Oct 2013 17:46:42 GMT"  
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Server: nginx/1.2.5"      
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Vary: Cookie"      
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "x-user: 1" 

Tôi muốn lấy tiêu đề x-user và chuyển thông qua máy chủ phụ trợ.

Tôi đã thử các kết hợp khác nhau trong khối location / nhưng chưa có kết quả nào trong số chúng hoạt động. Ví dụ.

  • proxy_set_header x-user $upstream_http_x_user;
  • proxy_set_header x-user $http_x_user;
  • proxy_set_header x-user $sent_http_x_user;
  • proxy_pass_header x-user

Không ai trong số những vẻ làm việc. Bất kỳ ý tưởng làm thế nào tôi có thể hoàn thành nhiệm vụ này? Xin lưu ý rằng đó là proxy ủy quyền đang đặt tiêu đề mà tôi muốn chuyển tới máy chủ phụ trợ,

Trả lời

24

Woop, đã tìm ra nó. Các nginx cấu hình đúng trông như thế này:

location/{            
    auth_request  /_auth;        
    auth_request_set $user $upstream_http_x_user;  
    proxy_set_header x-user $user;     
    proxy_pass  http://backend_server;     
}               

Vấn đề là bạn không thể gán tiêu đề trực tiếp vào tiêu đề khác, bạn phải sử dụng auth_request_set để đặt tiêu đề vào một biến và sau đó gán biến mà để một tiêu đề.

+0

Cảm ơn, các công trình của nó –

+0

Tôi làm cách nào để chuyển người dùng $ tới cookie? –

+1

@ShivKumar mở ra một câu hỏi mới cho điều đó. – mjallday

Các vấn đề liên quan