Nginx:优化 HTTP 缓存网站的服务器响应时间

Qui*_*Par 6 performance nginx performance-tuning http-caching

我有一个网站,其中包含从 nginx 的 http 缓存提供的所有页面,并且很少失效或过期。

平均总页面下载大小约为 2 MB 但尽管是一个没有有趣逻辑的静态站点,但我的服务器响应约为一秒

在此处输入图片说明

我记录了 nginx $request_time,它从服务器到大约 400 毫秒

在此处输入图片说明

每个文件平均为 20-30 KB

在此处输入图片说明

400 毫秒似乎很荒谬。

我支持Cloudflare并且

sendfile        on;
tcp_nopush     off;
tcp_nodelay on;
keepalive_timeout  300s;
keepalive_requests 10000;
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能将响应时间降低到 150 毫秒范围内?

编辑:我调整的第一部分。

意识到我没有开启 SSL OSCP。将代码调整为

# https://github.com/autopilotpattern/wordpress/issues/19
    ssl_session_cache   shared:SSL:50m;
    ssl_session_timeout 1d;

    ssl_certificate /etc/letsencrypt/live/site.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/site.com/chain.pem;
    ssl on;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
Run Code Online (Sandbox Code Playgroud)

我会反馈改进的。

编辑2:

这是从印度到美国西海岸服务器的 3G 连接的网页测试结果

在此处输入图片说明

在此处输入图片说明

mc0*_*c0e 0

我不认为你能解决优化问题。首先你需要弄清楚时间都去哪儿了。

我认为您不是在谈论在浏览器中显示的时间,因此暂时将浏览器排除在外。使用像curl和ab这样的轻量级命令行工具来收集您的计时信息。从您的桌面或连接良好的服务器(除服务此站点的服务器之外)使用此类工具可能会很有用,可以排除本地系统、网络或浏览器的问题。

使用 ab(带有 apache 工具)或curl 运行一些测试,在您的服务器上运行它们,这样您就可以将网络延迟和 cloudflare 排除在外。您需要使用选项来连接到本地 http 服务器(而不是 DNS 指向的服务器),并使用正确的Host标头。现在你的延迟情况如何?这应该可以告诉您问题是在您的网络服务器中还是在其外部。它包括 nginx 缓存的优点,但不包括任何来自 cloudflare 的缓存。

如果您的服务器上的这一点很快,那么您正在考虑 cloudflare 和网络。否则,请继续查看您的服务器。

除了从客户端的角度查看请求需要多长时间之外,您还可以修改 nginx 日志格式以在日志中获取更多计时信息。我通常使用类似的东西:

log_format  combined  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$request_time" "$msec"';
Run Code Online (Sandbox Code Playgroud)

如果情况允许,我会为我使用的大多数服务器永久保留此日志记录设置。

如果您仍然看到$request_time日志字段中记录的延迟,那么topatop或类似的内容可能会帮助您确定时间是花在 nginx 上还是正在等待其他进程。

当您弄清楚哪种进程有延迟时,您可能能够使用 来弄清楚发生了什么straceltrace有时也同样有用,有时需要使用调试器进入完整的配置文件或跟踪计时信息,尽管这通常是相当耗时的方法。绝对从 开始strace

我预计您还会有更多问题,但您不要关注所有可能值得关注的领域的细节,而是尝试上述方法,然后根据您发现的内容添加更多详细信息,怎么样?