2017-02-22 45 views
1

我試圖用nginxngx_http_auth_request_module以這樣的方式:我如何使用外部URI與nginx的的auth_request模塊

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

在這種情況下,錯誤是阿爾莫ST相同:

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路由?

如果不是,爲什麼?
通過靜態文件(/usr/local/html)查找auth_request的URI看起來有點奇怪。

回答

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

它不存在,但是也不需要以'/'開頭的前綴。 –