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 连接的网页测试结果
我不认为你能解决优化问题。首先你需要弄清楚时间都去哪儿了。
我认为您不是在谈论在浏览器中显示的时间,因此暂时将浏览器排除在外。使用像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
日志字段中记录的延迟,那么top
或atop
或类似的内容可能会帮助您确定时间是花在 nginx 上还是正在等待其他进程。
当您弄清楚哪种进程有延迟时,您可能能够使用 来弄清楚发生了什么strace
。 ltrace
有时也同样有用,有时需要使用调试器进入完整的配置文件或跟踪计时信息,尽管这通常是相当耗时的方法。绝对从 开始strace
。
我预计您还会有更多问题,但您不要关注所有可能值得关注的领域的细节,而是尝试上述方法,然后根据您发现的内容添加更多详细信息,怎么样?
归档时间: |
|
查看次数: |
1207 次 |
最近记录: |