Я нашел обходной путь, используя простой proxy_pass, и назначил локальный хост резервным вышестоящим сервером, а затем переписал от имени реального резервного вышестоящего сервера.
Конфигурация как ниже:
upstream upstream-proj-a {
server server1.test.com:9991;
# Use localhost as backup
server localhost backup;
}
server {
listen 80;
listen [::]:80;
resolver 127.0.1.1;
server_name www.test.com;
location /lib/proj/proj-a {
# Do rewrite then proxy_pass to real upstream server
rewrite /lib/proj/proj-a/(.*) /lib/proj/proj-a-internal/$1 break;
proxy_pass http://server2.test.com:9992;
}
location /proj/proj-a {
proxy_next_upstream error timeout http_404;
proxy_pass http://upstream-proj-a/lib/proj/proj-a;
}
}
Работает нормально, но единственным побочным эффектом является то, что, когда запрос должен перейти на сервер резервного копирования, он создает еще один новый HTTP-запрос от localhost к localhost, который, кажется, удваивает нагрузку на nginx. Цель состоит в том, чтобы передавать довольно большие файлы, и я не уверен, влияет ли это на производительность или нет, особенно если все протоколы - https вместо http.