3

嘿嘿。我正在使用带有 apache2 的 mod_proxy 为在本地机器上运行的多个 servlet 应用程序提供 vhost 功能。在大多数情况下,它工作正常。请求进入 apache,然后被定向到绑定在 localhost 端口上的应用程序。应用程序接收请求并响应,由 apache 传递回客户端。

我遇到的问题是应用程序提供了 500 个错误,并且 mod_proxy 踩到了它们。通常这些错误是在 ajax 请求中引起的,错误是在客户端 javascript 中处理的。例如,对服务器端 createObject(name) 的调用可能会引发 NameNotUniqueException ,该异常会以 500 的形式返回。然后,客户端 javascript 可能会显示适当的错误消息。

当应用程序抛出错误(导致对 mod_proxy 的 500 响应)时,apache 会踩下错误消息并返回

500内部服务器错误

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

..股票apache服务器端错误消息。

我希望 mod_proxy 将原始 500 传回给客户端。有没有我错过的指令可以防止 500 被破坏?

TIA

4

2 回答 2

4

你有

 ProxyRequests Off
 ProxyErrorOverride Off
 ProxyPass /path/ http://backend.ip/path/
 ProxyPassReverse / http://backend.domain/

将 backend.ip 和 backend.domain 替换为您的值(我在这里使用 backend.ip,因为它会阻止 apache 对每个请求运行 dns 查询)。

通常错误会按原样报告。因为 ProxyErrorOverride 默认为关闭。如果我的配置没有发生这种情况,请检查 500 是否真的来自您的后端服务器。或者只是向我们展示您的完整代理配置。

于 2010-06-23T10:45:13.927 回答
-1

我有同样的问题,自从从 apache2/mod_wsgi 更改为 apache2 并使用反向代理到 mod_wsgi-express 后,得到了 500 页空白。

我的配置(用 www.example.com 替换实际域):

<VirtualHost *:443>
  ServerName www.example.com

  ProxyRequests Off
  ProxyErrorOverride Off
  ProxyPass         /  http://localhost:8001/
  ProxyPassReverse  /  https://www.example.com/
  ProxyPreserveHost On
  RequestHeader set X-Forwarded-Proto "https"

  ErrorLog /var/log/apache2/www.example.com.error.log
  LogLevel warn
  CustomLog /var/log/apache2/www.example.com.log combined

  SSLEngine On
  SSLCertificateFile    /etc/letsencrypt/live/www.example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
  SSLCertificateChainFile       /etc/letsencrypt/live/www.example.com/fullchain.pem
</VirtualHost>
于 2019-05-08T08:44:50.153 回答