如何在nginx的auth_request模块中使用外部URI

时间:2017-02-22 00:12:55

标签: nginx

我试图以这种方式使用nginx的{​​{1}}:

ngx_http_auth_request_module

它不起作用,错误是:

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/html@auth" 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)查找auth_request的URI看起来有点奇怪。

1 个答案:

答案 0 :(得分:2)

有一个鲜为人知的事实是,您不必使用/@开始定位。

所以这会奏效:

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
}