Nginx中的请求序列

Nginx中的请求序列,nginx,nginx-location,Nginx,Nginx Location,我有一个场景,服务器需要在实际请求之前执行授权请求。因此,一个请求由两个不同的服务提供 Nginx的位置必须由Auth服务处理,如果响应状态为200ok,则请求应转发到功能服务。否则,如果响应状态为401,则该状态应回复至前端 upstream auth_service { server localhost:8180; } upstream feature_service { server localhost:8080; } location /authAndDo { #

我有一个场景,服务器需要在实际请求之前执行授权请求。因此,一个请求由两个不同的服务提供

Nginx的位置必须由Auth服务处理,如果响应状态为200ok,则请求应转发到功能服务。否则,如果响应状态为401,则该状态应回复至前端

upstream auth_service {
    server localhost:8180;
}
upstream feature_service {
    server localhost:8080;
}
location /authAndDo {
    # suggest here
}

nginscript中的代码片段也可以。

一般来说,这样的代码片段在web服务器上是不可能的。401是前端的一个响应,并提供HTTP WWW身份验证响应头。根据需要开发web应用程序或编辑401文件。用户、浏览器应理解该消息

Nginx community edition的auth_请求将仅在子请求返回HTTP 200时处理,否则对于401,默认情况下将不会重定向到401以上,其他标头将不会处理响应以保护应用程序和用户。Nginx社区版甚至不支持HTTP/2的所有功能。它会变得更糟

Apache2 web服务器完全支持HTTP/2,并且只在少数浏览器上工作。很少有浏览器允许Apache2完美地做到这一点。其他显示无法加载页面。在Stack Exchange networks的各个子域上,人们曾要求使用Apache2使其适用于所有浏览器

您很难在Nginx上重定向:

error_page 401 /401.html;

location ~ (401.html)$ {
    alias /usr/share/nginx/html/$1;
}

另一种方法是在另一台服务器上使用反向代理。我不能保证加载页面失败

专门用于此目的,通过默认情况下不构建而存在


它允许您通过子请求将身份验证放在您想要的任何位置,有效地将身份验证与实际资源分开。

询问服务器配置问题的合适平台是serverfault.com,而不是离题的地方:专业服务器上的问题、网络、,除非直接涉及编程或编程工具,否则相关的基础设施管理与堆栈溢出无关@罗布:我想这涉及到nginscript编程。我认为不可能避免为ngx loc编写这样一个序列的脚本。您能否向我们展示您迄今为止尝试过的代码片段,并具体解释哪些尝试无法正常工作?@csm\u dev我很好奇解决此问题的最佳方法。我不会问我是否知道。我可以编写nginscript代码,但也许我不应该这样做,而是应该开始实现自己的nginx模块或其他东西。@yvs,请您看看我的答案是否解决了问题,如果是,请接受答案和/或奖励奖金。如果两者都不执行,则至少一半的赏金将转到/dev/null。谢谢供参考:我做了+1你的问题。