用作 https 的反向代理时 nginx 行为变慢
Slow nginx behavior when using as reverse proxy for https
设置:
- 虚拟 SSL 端点 https://hookb.in/VGQ3wdGGzKSE22bwzRdP
- 在本地主机上安装 Nginx
步骤:
第一次使用浏览器访问 hookb.in
端点,我们得到网络 activity,如下所示。耗时 865 毫秒
图1
随后使用浏览器访问 hookb.in
端点花费的时间更少,因为它使用相同的 tcp 连接,下面是参考的屏幕截图。 (一切顺利!!)
图2
使用以下 nginx 配置设置 http-> https 反向代理
worker_processes 1;
events {
worker_connections 1024;
}
http {
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location /session {
proxy_pass https://hookb.in/VGQ3wdGGzKSE22bwzRdP;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_ssl_session_reuse on;
proxy_socket_keepalive on;
}
}
}
- 现在从浏览器点击
http://127.0.0.1/session
,nginx 将正常工作并代理来自 https 站点的内容。
但是 nginx 响应时间总是比直接访问 https 站点多 200ms。下面是 ref
的屏幕截图
为什么 nignx 花费额外的时间,它是每次都打开新的 ssl 连接还是有其他问题?
我知道使用反向代理我们会增加额外的跃点,但是 200 毫秒是很大的不同。
我该如何解决?
您使用的配置意味着nginx会打开一个新的
为每个代理请求连接到上游服务器。到
配置 nginx 以保持上游连接处于活动状态,请参阅
此处“keepalive”指令的说明:
值得注意的是,确保配置一个上游块
“保持活动”指令。在 http 级别是这样的
假设配置中没有其他更改,应该可以工作:
upstream hookb.in {
server hookb.in:443;
keepalive 2;
}
在上面的示例中,nginx 将保持最多两个连接。
(这几乎是我在 nginx 邮件列表中的 response 的副本。)
设置:
- 虚拟 SSL 端点 https://hookb.in/VGQ3wdGGzKSE22bwzRdP
- 在本地主机上安装 Nginx
步骤:
第一次使用浏览器访问
hookb.in
端点,我们得到网络 activity,如下所示。耗时 865 毫秒
图1随后使用浏览器访问
hookb.in
端点花费的时间更少,因为它使用相同的 tcp 连接,下面是参考的屏幕截图。 (一切顺利!!)
图2使用以下 nginx 配置设置 http-> https 反向代理
worker_processes 1;
events {
worker_connections 1024;
}
http {
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location /session {
proxy_pass https://hookb.in/VGQ3wdGGzKSE22bwzRdP;
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_ssl_session_reuse on;
proxy_socket_keepalive on;
}
}
}
- 现在从浏览器点击
http://127.0.0.1/session
,nginx 将正常工作并代理来自 https 站点的内容。
但是 nginx 响应时间总是比直接访问 https 站点多 200ms。下面是 ref
的屏幕截图 为什么 nignx 花费额外的时间,它是每次都打开新的 ssl 连接还是有其他问题?
我知道使用反向代理我们会增加额外的跃点,但是 200 毫秒是很大的不同。
我该如何解决?
您使用的配置意味着nginx会打开一个新的 为每个代理请求连接到上游服务器。到 配置 nginx 以保持上游连接处于活动状态,请参阅 此处“keepalive”指令的说明:
值得注意的是,确保配置一个上游块 “保持活动”指令。在 http 级别是这样的 假设配置中没有其他更改,应该可以工作:
upstream hookb.in {
server hookb.in:443;
keepalive 2;
}
在上面的示例中,nginx 将保持最多两个连接。
(这几乎是我在 nginx 邮件列表中的 response 的副本。)