amazon-ec2 - Apache2 服务器和 Superset,502 代理错误,加载仪表板时从远程服务器读取错误

标签 amazon-ec2 proxy apache2 apache-superset dremio

简介

我的 Apache Superset 和 Apache2 服务器位于同一个 EC2 实例上。 Apache2 充当代理服务器。它接受 HTTPS 请求并将它们传输到 Apache Superset。 Apache Superset 使用 gunicorn 运行。

问题

向 Apache Dremio 数据引擎发出请求可能需要一些时间(< 60 秒)。当访问 Superset 上的仪表板时,使用 DNS 名称和 SSL,使用代理设置一些仪表板部分(请求)失败并出现以下错误:

Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request
Reason: Error reading from remote server

奇怪的是,尽管 ProxyTimeout 的默认值相当高,但这些错误可能会在几秒钟内出现。

如果通过IP地址访问Superset,则不会出现该问题。

apache2/error.log 中的错误信息:

(20014) Internal error (specific information not available): [client 10.4.26.3:6969] AH01102: error reading status line from remote server localhost:8088, referer: ...

尝试解决问题的方法

问题可能出在代理服务器超时或 Superset 网络服务器断开某些连接。我的 Apache2 配置:

<VirtualHost *:443>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName dash.domain.com
  ServerAlias dash.domain.com

  SSLEngine on
  SSLCertificateFile /etc/ssl/private/cert.crt
  SSLCertificateChainFile /etc/ssl/certs/cert2.crt
  SSLCertificateKeyFile /etc/ssl/private/key.key

  ProxyPass / http://localhost:8088/ connectiontimeout=3600 timeout=3600
  ProxyPassReverse / http://localhost:8088/

  # things tried
  # SetEnv force-proxy-request-1.0 1
  # SetEnv proxy-nokeepalive 1
  # SetEnv proxy-initial-not-pooled 1
  # ProxyTimeout 3600
  # TimeOut 3600
</VirtualHost>

测试的东西(不工作):

  1. TimeoutProxyTimeout
  2. connectiontimeouttimeout(如上所示)
  3. Keepalive=On 用于 ProxyPass
  4. 不同的设置环境
  5. superset_config.py -> ENABLE_PROXY_FIX, SUPERSET_WEBSERVER_TIMEOUT

此外,使用nginx构建了类似的代理设置,错误与此处描述的类似。

如有任何帮助或想法,我们将不胜感激。非常感谢!

有用信息

Apache 超集版本:0.37.2

Apache Dremio 版本:4.1.0

Apache2 服务器版本:2.4.29

EC2 实例类型:t3.medium

操作系统版本:Ubuntu 18.04

最佳答案

问题在于垂死的 gunicorn async workers。来自图表的请求太多,工作人员无法处理它们。将 worker 类型从 async 更改为 sync(默认 gunicorn 类型)解决了代理问题。

我仍然不知道为什么通过 IP 直接访问没有产生 502 代理错误。

抱歉,问题中没有包含有关 gunicorn 的信息。

P.S 从他们的文档中推荐的 Apache Superset worker 类型是async,但是,对于我的情况,sync 是更好的解决方案。从理论上讲,同步 worker 比异步(在 Superset 上下文中)慢。

关于amazon-ec2 - Apache2 服务器和 Superset,502 代理错误,加载仪表板时从远程服务器读取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64688390/

相关文章:

android - 在 Android Studio 中设置 Http 代理

proxy - hg 克隆无法访问网络

Java Selenium : Using proxy with authentication

ssl - 启用 SSL 后 Apache 不会重新启动

linux - 如何使用 ssh 在远程 linux 机器(AWS ec2 实例)上运行本地 .sh 文件(存在于本地 linux 机器上)

database - 如何计算 Amazon RDS 上的小时/月使用量和定价?

linux - AWS Linux 实例上的权限被拒绝(公钥)

amazon-ec2 - EC2 Linux 实例上的 TeamCIty Server 在启动完成之前就终止了

ubuntu - Symfony2 在 Apache 上安装演示/配置 404 错误

php - 并发请求 - Codeigniter 或 Apache 2.4 或 MySQL