![从 Http 服务器提供 Web 应用程序错误消息](https://linux22.com/image/534140/%E4%BB%8E%20Http%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8F%90%E4%BE%9B%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%94%99%E8%AF%AF%E6%B6%88%E6%81%AF.png)
我有 nginx 作为 http 服务器,tomcat 作为后端(使用 proxy_pass)。它运行良好,但我想定义自己的错误页面(404、500 等),并且它们由 nginx 而不是 tomcat 提供。例如,我有以下资源:
https://domain.com/resource
不存在。如果我 [GET] 该 URL,则会从 Tomcat 而不是 nginx 收到“未找到”消息。
我想要的是,每次 Tomcat 响应 404(或任何其他错误消息)时,nginx 都会向用户发送一条消息:nginx 可访问某些 html 文件。
我配置 nginx 服务器的方式非常简单,只需:
location / {
proxy_pass http://localhost:8080/<webapp-name>/;
}
并且我已经将端口 8080(即 tomcat)配置为无法从本机外部访问。
我认为location
在 nginx 配置中使用不同的指令不会起作用,因为有些资源依赖于 URL:
https://domain.com/customer/<non-existent-customer-name>/[GET]
始终会返回 404(或任何其他错误消息),而:
https://domain.com/customer/<existent-customer>/[GET]
将返回不同于 404(客户存在)的任何内容。
有没有办法用 Nginx(http 服务器)来提供 Tomcat(应用服务器)错误消息?检查指令发送的消息proxy_pass
并对其采取行动?
答案1
好的,我找到了。在server
nginx 站点配置部分中,我使用的是:
error_page 404 /404.html;
location = /404.html {
root /var/www/nginx;
}
location / {
proxy_pass http://localhost:8080/api/;
proxy_intercept_errors on;
}
您需要将proxy_intercept_errors on
nginx 添加到拦截他们.Nginx 将仅拦截您用 定义的错误error_page
。