nginx - Nginx - auth_request返回401后如何重定向到登录页面
问题描述
我auth_request /auth;
按照配置子请求身份验证/中的描述进行操作
如果 /auth 返回 401 或 403,我如何重定向到登录页面?
我试过了
error_page 401 403 = @error401;
location = ^/securedUrl {
add_header dbg-header dbg_ws_3;
auth_request /auth;
proxy_pass http://auth-module:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass_header x-remaining-session-time;
}
location @error401 {
return 302 /login-module/login;
}
location = /auth {
internal;
rewrite ^/(.*) /is-authorized break;
proxy_pass http://auth-module:8080;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
但它不起作用,我在浏览器中得到 401
解决方案
使用代理请求时,应设置“proxy_intercept_errors on;” 在该位置。像这样:
location = ^/securedUrl {
add_header dbg-header dbg_ws_3;
auth_request /auth;
proxy_pass http://auth-module:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass_header x-remaining-session-time;
}
location @error401 {
return 302 /login-module/login;
}
location = /auth {
internal;
rewrite ^/(.*) /is-authorized break;
proxy_pass http://auth-module:8080;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_intercept_errors on;
error_page 401 = @error401;
}
推荐阅读
- flutter - 如何修复firebase身份验证?
- node.js - 如何检查来自 POST 请求的纯文本响应?
- javascript - 如何用 JSON 文件中的数据替换 Javascript 中 JSON 格式的字符串?
- mysql - MySQL LEFT JOIN 忽略 AND 条件
- php - 尝试在 Symfony 4 中调用名为“redirect”的未定义方法错误
- angular - 尝试在 Angular 应用程序中进行依赖倒置是个好主意吗?
- javascript - 更改 Bootstrap Datepicker 的语言
- python - 如何使用 SQLAlchemy 从 ST_Dump 获取“geom”部分?
- python - 使用 zlib 在 C 中读取 Python 压缩数据
- python-3.x - 需要帮助以编程方式访问 Google 云端硬盘