我的情况:
在 ubuntu 服务器上使用默认的 apache2 安装托管网站。
使用 HTTPS 和自签名证书(用于开发)在端口 443 上提供服务。
现在我有一个用 golang 编写的简单服务,它监听端口 8080 并充当反向代理来接收 https 请求,将它们转发到本地的 apache 并将响应返回给客户端。此网络服务不缓存任何文件,仅转发请求。
代码:https://play.golang.org/p/tnfKVWyLuZQ
我的“问题”:
直接调用 apache,即 https://foo.com/bar/
比通过我的反向代理调用网站,即 https://foo.com 慢得多(200-400 毫秒) :8080/栏/
为什么直接调用apache2会比较慢?我预计使用反向代理会有开销,而不是加速。 -> 例如页面比较:https://i.imgur.com/TqznM2v.png
更新:显示当前设置的草图: Current Setup
关于编码:Encoding在两种情况下是一致的:Encoding header和Content-Length在两种情况下(情况1 vs 2)相同,客户端也收到文件大小。不确定为什么在 HAR 查看器中它只显示第二种情况下的未压缩大小。如果在 Chrome 中检查,我可以看到两种情况下的压缩大小。
更新#2:我得出的结论是,golang 实现在短时间内比默认配置的 apache2 更有效地处理来自同一客户端的多个请求。 Sicne 我只测试了几个客户端我不能说它的扩展性如何 - 我想 web 服务在负载下会落后。
我认为这已关闭,感谢大家的帮助。
最佳答案
据我所知。有两个可能的原因。
- apache 反向代理处理了一些包含静态文件(如图像、css 或 javascript)的缓存。
- 当您浏览 https 网址时。一个名为“ssl certificate uninstall”的过程将会发生,它会导致巨大的服务器负载。所以如果web应用和ssl证书部署在同一台服务器上,负载可能会造成高延迟。一般我们使用一个叫做load-balancer的特殊设备来卸载ssl证书,就像一个反向代理。
关于apache - Apache2 提供的 HTTPS 请求比通过反向代理慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910531/