Вам нужна директива proxy_intercept_errors
.
Значением по умолчанию этой директивы является off
.Вы должны включить его on
, если хотите перехватить ответ от прокси-сервера с кодом состояния больше / равным 300 (конечно, 502 включительно). Подробнее об этой директиве .
Вот пример файла конфигурации, который я протестировал.
upstream tomcat502 {
server 10.10.100.131:28889; # There is no such a backend server, so it would return 502
}
server {
listen 10019; # it's up to you
server_name 10.10.100.133;
location /intercept502 {
proxy_intercept_errors on; # the most important directive, make it on;
proxy_pass http://tomcat502/;
error_page 502 = @502; # redefine 502 error page
}
location @502 {
return 502 $request_uri\n; # you could return anything you want.
}
}
После перезагрузки nginx используйте curl
для его проверки.
[root@test133 lunatic]# curl http://10.10.100.133:10019/intercept502
/intercept502
[root@test133 lunatic]# curl http://10.10.100.133:10019/intercept502 -I
HTTP/1.1 502 Bad Gateway
Server: nginx/1.12.1
Date: Wed, 09 Jan 2019 13:48:05 GMT
Content-Type: application/octet-stream
Content-Length: 14
Connection: keep-alive
Я добавил некоторые пояснения в конфигурации.Надеюсь, это поможет.