我有一个后端服务器(Apache),它离我们的大多数用户太远了,所以我们的想法是实现一个更近的反向代理,充当缓存。
乍一看,它确实很有效。缓存的静态文件提供速度极快,但除此之外,反向代理 (NGINX) 需要连接到后端服务器,这需要一些时间进行 SSL 握手,从而使这些初始请求变得缓慢。
我一直在搜索这方面的信息,但找不到保持此连接的方法。有办法吗?
我甚至尝试去了解更多有关 websockets 的知识,但是我能找到的所有实现都是为了回答特定的请求,而不是保持两个 web 服务器(反向代理的 NGINX 和后端的 Apache)之间的连接。
你们当中有谁对要学习/使用/搜索什么才能实现这一目标有什么想法或建议吗?
提前谢谢您!
答案1
在 nginx 中你只能指定keepalive
对于上游连接,如果连接定义在upstream
块。例如:
upstream backend {
server private-api.example.com:443;
keepalive 32;
}
此处keepalive
指定每个与上游服务器同时打开的最大连接数工作进程。
要使用上游,您需要指定其名称proxy_pass
而不是后端地址。
例如,如果您以前使用过:
proxy_pass https://private-api.example.com:443;
您可以将其更改为:
proxy_pass https://backend;
按字面意思用上游的名称替换定义的server
。
您还必须将 HTTP 版本设置为 1.1(因为它默认为 1.0,这很荒谬)并清除连接标头:
proxy_http_version 1.1;
proxy_set_header Connection "";
请记住,keepalive_timeout
您还可以在其中定义一个upstream
可能需要调整的超时时间。默认情况下,该时间是 60 秒,因此,如果连接空闲了这么长时间,它将被关闭,即使keepalive
打开的连接数少于 100 个。后端服务器将有自己的保持活动超时,您也需要单独调整该超时时间。