我有一个节点 Web 应用程序,其中 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";
}
}
如果 Web 应用程序出现故障,则该error_page
指令会将用户发送到站点外,但 URL 最终会发生变化。是否可以将用户发送到该站点,但在浏览器中保持相同的 URL?
答案1
作为文档说:
如果在内部重定向期间不需要改变 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/;
}