gpt4 book ai didi

authentication - Nginx 身份验证请求意外状态 404

转载 作者:行者123 更新时间:2023-12-03 09:03:00 25 4
gpt4 key购买 nike

将子请求发送到 nginx auth_request 模块时出现以下错误。
作为信息,我开发了一个基于 Spring Security 的 Web 应用程序,它只包含一个 Web 方法,即进行身份验证以验证用户凭据和 session ,并以 200 或 401 错误代码响应。

成功验证页面被重定向到主页 url 后,该 url 应显示上游应用程序的主页,而不是我在 nginx 日志中收到此错误,其状态如下

错误
身份验证请求意外状态:404 发送到客户端时,客户端:127.0.0.1,服务器:,请求:“GET/HTTP/1.1”,主机:“localhost:8180”,引用者:“https://localhost:8180/login.html”*

此错误表明 nginx 已将完整请求的 url 传递给 auth subrequest 而不是“/authenticate”,并且 auth 服务会查找它在其中找不到的资源并抛出 404 错误。

    server {
listen 8180 ssl;
ssl_certificate certs/nginx.pem;
ssl_certificate_key certs/nginx.pem;

location /{
proxy_set_header xclnt "ap1";
auth_request /authenticate;
proxy_pass https://adi-backend;
}

location = /authenticate {
proxy_set_header xclnt "ap1";
proxy_pass http://authserv;
}

location = /login.html {
root html;
}

location = /50x.html {
root html;
}
error_page 500 502 503 504 /50x.html;
error_page 401 403 login.html;
}

最佳答案

The docs说返回状态 404 Not Found from http://authserv不支持。 ngx_http_auth_request_module只需要 2xx、401 或 403:

If the subrequest returns a 2xx response code, the access is allowed. If it returns 401 or 403, the access is denied with the corresponding error code. Any other response code returned by the subrequest is considered an error.



编写 auth 模块的人显然认为 404 意味着无法找到 auth 端点本身,例如验证请求被发送到错误的 URL。而不是请求的东西不存在。

因此,如果您不希望日志中出现这些错误,请使用 auth 模块以外的其他内容。 ...

... 也许 Lua ?这就是我正在做的事情,当我希望“auth”处理程序同时进行身份验证并检查所请求的东西是否存在时:

这是我的 Lua 方法(工作正常):
location ~ ^/-/u/([^/][^/]+/)(.*)$ {

# (1. There's Nginx's http_auth_request_module module, but it handles upstream 404 Not Found
# as an internal error. So it cannot both do auth, and check does-it-exist? at the same time.
# 2. ngx.location.capture is synchronous, but non-blocking: the code execution stops, until
# a response is received — but meanwhile, the nginx worker continues with other things.)
set $publSiteId $1;
set $hashPath $2;
access_by_lua '
response = ngx.location.capture("/_auth_upload/" .. ngx.var.publSiteId .. "/" .. ngx.var.hashPath)
if response.status == 404 then
ngx.status = 404
ngx.say("Not found. [TyNGXFKB604]")
return ngx.exit(ngx.OK)
end
if response.status == 401 or response.status == 403 then
ngx.status = response.status
ngx.say("Access denied. [TyNGX5KWA2]")
return ngx.exit(ngx.OK)
end';

alias /opt/talkyard/uploads/public/$2;
... cache headers ...
}

这是 Nginx 子请求处理程序:
location /_auth_upload/ {
# Only for Nginx subrequests.
internal;
proxy_pass http://app:9000/-/auth-upload/;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}

完整来源 here .我希望这有帮助 :- )

关于authentication - Nginx 身份验证请求意外状态 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48787515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com