2017-02-22 1 views
1

Я пытаюсь использовать nginx «s ngx_http_auth_request_module таким образом:как я могу использовать внешний URI с модулем auth_request в Nginx в

server { 

    location/{ 
     auth_request http://external.url; 
     proxy_pass http://protected.resource; 
    } 
} 

Это не работает, ошибка:

2017/02/21 02:45:36 [error] 17917#0: *17 open() "/usr/local/htmlhttp://external.url" failed (2: No such file or directory), ... 

Или таким образом с named location:

server { 

    location/{ 
     auth_request @auth; 
     proxy_pass http://protected.resource; 
    } 

    location @auth { 
     proxy_pass http://external.url; 
    } 
} 

в этом случае ошибка Альма й то же самое:

2017/02/22 03:13:25 [error] 25476#0: *34 open() "/usr/local/[email protected]" failed (2: No such file or directory), client: 127.0.0.1, server: , request: "GET/HTTP/1.1", subrequest: "@auth", host: "127.0.0.1" 

Я знаю, что есть способ, как это:

server { 

    location/{ 
     auth_request /_auth_check; 
     proxy_pass http://protected.resource; 
    } 

    location /_auth_check { 
     internal; 
     proxy_pass http://external.url; 
    } 
} 

Но в этом случае http://protected.resource не может использовать /_auth_check путь.

Есть ли способ использовать внешний URI в качестве параметра для директивы auth_request без перекрытия маршрутизации http://protected.resource?

Если нет, то почему?
Это выглядит немного странно, чтобы искать URI auth_request через статические файлы (/usr/local/html).

ответ

1

Существует малоизвестный факт, что вам не нужно начинать работу с / или @.

Так что это будет работать:

location/{ 
    auth_request .auth; 
    proxy_pass http://protected.resource; 
} 

location .auth { 
    internal; 
    proxy_pass http://external.url/auth; 
    # you must use path part here^
    # otherwise it would be invalid request to external.url 
} 
+0

Большое спасибо! Я не мог найти это в документации, не так ли? –

+0

Его нет, но префикс не требуется, чтобы начать с '/'. –

Смежные вопросы