Varnish / Nginx:空闲约 5 秒后的初始连接
Varnish / Nginx: initial connection after idle for ~5 seconds
我已经在 http://95.85.19.39/ 上设置了一个测试服务器,使用 varnish 4.1.5(端口 80)和 nginx 1.4.6(端口 8080)运行正在 Ubuntu 14.04。我正在使用 Chrome 57.0.2987.110(64 位)。
Varnish 正在缓存页面,但是当您等待 5 秒以上并点击刷新时,您会看到一个初始连接,这是为什么?当您在 5 秒内点击刷新时,将不会有初始连接。
如果我删除 varnish 并且 运行 服务器只在 Nginx 上,那么我将无法再获得初始连接,所以我假设我的 Varnish 有问题。
有谁知道为什么会这样,我该如何解决这个问题?
没有初始连接
有初始连接
nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/sites-enabled/default.conf;
}
default.conf
server {
listen 8080;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(htaccess|htpasswd|ini|phps|fla|log|sh)$ {
deny all;
}
}
default.vcl
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
}
sub vcl_backend_response {
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
/etc/default/varnish
START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
您观察到的是正常的。 Varnish 4 中默认的 keepalive 值为 5 秒。
第一个请求涉及额外的 TCP 开销。如果第二个请求在 5 秒内发生,它将通过现有的 TCP 连接执行,并且不会进行 "initial connection",从而节省一些时间。
如果您希望保持活动超时超过 5 秒,您可以增加 Varnish 客户端超时。
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m" \
-p timeout_idle=75
我已经在 http://95.85.19.39/ 上设置了一个测试服务器,使用 varnish 4.1.5(端口 80)和 nginx 1.4.6(端口 8080)运行正在 Ubuntu 14.04。我正在使用 Chrome 57.0.2987.110(64 位)。
Varnish 正在缓存页面,但是当您等待 5 秒以上并点击刷新时,您会看到一个初始连接,这是为什么?当您在 5 秒内点击刷新时,将不会有初始连接。
如果我删除 varnish 并且 运行 服务器只在 Nginx 上,那么我将无法再获得初始连接,所以我假设我的 Varnish 有问题。
有谁知道为什么会这样,我该如何解决这个问题?
没有初始连接
有初始连接
nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/sites-enabled/default.conf;
}
default.conf
server {
listen 8080;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(htaccess|htpasswd|ini|phps|fla|log|sh)$ {
deny all;
}
}
default.vcl
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
}
sub vcl_backend_response {
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
/etc/default/varnish
START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
您观察到的是正常的。 Varnish 4 中默认的 keepalive 值为 5 秒。
第一个请求涉及额外的 TCP 开销。如果第二个请求在 5 秒内发生,它将通过现有的 TCP 连接执行,并且不会进行 "initial connection",从而节省一些时间。
如果您希望保持活动超时超过 5 秒,您可以增加 Varnish 客户端超时。
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m" \
-p timeout_idle=75