回答
收藏
分享
举报
子请求中请求上游服务失败502页面自定义
提问于2020-08-25 09:54

浏览 995

文章标签

大佬们好!


我最近遇到upstream上游服务宕掉,但是nginx回复一个502错误页面的问题。当我查看代码后发现该页面是在代码中写死的,并且查看了代码的逻辑也不知道该如何使得nginx不返回该页面:



502 Bad Gateway

502 Bad Gateway



openresty/1.15.8.2




因为我是在模块开发的过程中使用 ngx_http_subrequest 生成了子请求,并在子请求中location中使用proxy_pass请求上游服务,因此当上游服务如果有问题的时候,我希望能在主请求中做出response,而不是由nginx代回复。


因此我想知道,如果上游服务失败或者上游服务宕掉的情况下,可不可以让nginx不返回这个502页面,或者发回的body我可以过滤掉不让其返回给客户端?

已修改于2023-03-15 02:12



写下您的回答
发表回答
全部回答(1)

按点赞数排序

按时间排序

是关于C模块开发的吗? 如果是的话,不列出代码是很难了解清楚问题的🙂

赞同

1

回复举报

回答于2020-08-26 16:07



回复陶辉
回复
小禾先生回复了
是在C模块开发,但是该返回不是由于我开发的模块导致的。我开发的模块中发起了子请求,然后由子请求向上游服务请求数据,上游服务是宕掉的。所以子请求就返回了502的错误页面,这个现象直接在nginx配置中就可以复现的: conf配置如下: ```nginx upstream killedups { server 127.0.0.1:8999; #宕掉的上游服务 } server { listen 8998; location /test { proxy_pass http://killedups/; } } ``` 然后使用curl请求: ```shell [root@v128 ~]# curl localhost:8998/test 502 Bad Gateway

502 Bad Gateway


openresty/1.15.8.2
``` 我明白直接使用error_page可以修改502错误回复的页面,但是我是在进行C模块开发,并且是在子请求中请求的上游服务。因此我是希望子请求失败的情况下主请求来回复,因此我想知道有没有什么办法可以让nginx在请求上游服务失败的情况下返回空的response。

0

回复举报

回答于2020-08-26 09:09



回复小禾先生
回复
陶辉回复了
proxy_intercept_errors on;配置了吗?

0

回复举报

回答于2020-08-26 10:34



回复陶辉
回复
提问者
小禾先生
这家伙很懒还未留下介绍~
0
文章
4
问答
0
粉丝
相关问答

ngx时多进程架构的,reload会关闭当前进程,所以会断开keepalive的连接的。第一类问题如果出现频率比较高,可能是upstream服务或者中间网络某个环节有问题,第二类跟check模块有关,不是很了解。能复现的话建议抓包看看。

点赞 0
浏览 1.8k