У меня есть веб-приложение node с nginx, выступающим в качестве прокси.
Вот server
блок для этого сайта:
server {
listen 80;
server_name subdomain.example.org;
location / {
# Offline handling
error_page https://example.org/502
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:4567;
proxy_redirect off;
# Socket.io Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Если веб-приложение когда-либо выйдет из строя, то error_page
Директива отправляет пользователя за пределы сайта, но в конечном итоге URL-адрес изменяется. Можно ли отправить пользователя на этот сайт, но сохранить тот же URL-адрес в браузере?
Как док говорит:
Если нет необходимости изменять URI во время внутреннего перенаправления, можно передать обработку ошибок в указанное место:
location / {
error_page 404 = @fallback; }
location @fallback {
proxy_pass http://backend;
}
Вам также нужно будет поставить on
в proxy_intercept_errors директива.
Кроме того, чтобы уважать формат URL-адреса, который вы указываете в своем примере (https://example.org/502
) мне пришлось использовать $folder
переменная.
Наконец, вам нужно будет настроить решатель директива.
В заключение у вас будет что-то вроде этого:
location / {
proxy_intercept_errors on;
error_page 404 = @fallback;
proxy_pass http://127.0.0.1:4567;
...
...
}
location @fallback {
resolver 8.8.8.8; # <-- Put your own DNS Server here
set $folder "502";
proxy_pass https://example.org/$folder/;
}