2013-10-14 6 views
13

Я хочу использовать auth_request для установки заголовка по успешному запросу аутентификации, а затем передать его до следующего прокси-сервера, который будет обрабатывать фактический запрос.Настройка заголовков с прокси-сервером NGINX auth_request

Я установил NGINX и различные прокси-серверы для выполнения своих задач, однако я не уверен, как установить заголовок с сервера (AUTH PROXY на диаграмме), который я использую для запроса auth таким образом, чтобы этот заголовок передается следующему серверу (BACKEND SERVER на диаграмме)

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

Мой NGINX конфиг выглядит

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

Когда я делаю фактический запрос я вижу следующее в журналах отладки Nginx (это часть ответа от сервера 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" 

Я хочу взять заголовок x-user и передать его на серверный сервер.

Я пробовал различные комбинации в блоке location /, но ни один из них еще не работал. Например.

  • 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

Ни один из них, кажется, работают. Любые идеи, как я могу выполнить эту задачу? Обратите внимание, что это auth proxy, который устанавливает заголовок, который я хочу передать серверу бэкэнд,

ответ

24

Woop, понял это. Правильный NGINX конфигурации выглядит следующим образом:

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

Проблема в том, что вы не можете присвоить заголовок непосредственно в другой заголовок, вы должны использовать auth_request_set, чтобы установить заголовок в переменной, а затем присвоить этой переменной к заголовок.

+0

Спасибо, его работы –

+0

Как я могу передать $ user cookie? –

+1

@ShivKumar открыть для этого новый вопрос. – mjallday