我有一个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/; }