当页面不存在时,如何在不重写URL的情况下透明地redirect用户?

我有一个nginx作为代理的节点web应用程序。

这是该网站的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?

正如文件所说:

如果在内部redirect期间不需要更改URI,则可以将error handling传递到命名位置:

 location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://backend; } 

您还需要使用proxy_intercept_errors指令。

另外,为了尊重您在示例( https://example.org/502 )中给出的URL格式,我必须使用$foldervariables。

最后,你将不得不设置parsing器指令。

总之,你会有这样的东西:

 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/; }