当前位置: 首页 > article >正文

nginx长连接配置

一、Nginx 长连接笔记

  1. 长连接的概念和优势

    • 概念:HTTP 长连接是指在一个 TCP 连接上可以连续发送和接收多个 HTTP 请求 / 响应,而不必在每个请求后都关闭连接,从而减少 TCP 连接建立和关闭的开销,提高性能和效率。
    • 优势:对于频繁请求资源的场景,如网页中包含多个图片、脚本、样式表等文件的加载,长连接可以显著减少 TCP 连接握手和挥手的时间消耗,加快页面整体加载速度,降低服务器负载,提高用户体验和服务器的并发处理能力。
  2. Nginx 中与长连接相关的指令

    • keepalive_timeout
      • 语法keepalive_timeout timeout [header_timeout];
      • 作用设置长连接的超时时间,即服务器在保持连接多长时间后没有新的请求就关闭连接。第一个参数 timeout 是服务器端等待下一个请求的超时时间,第二个参数 header_timeout(可选)是设置在响应头中 Keep-Alive: timeout=xxx 的值,用于通知客户端连接保持的最长时间。如果只设置一个参数,则同时用于服务器端和响应头。例如:keepalive_timeout 65; 表示服务器端和客户端的长连接超时时间均为 65 秒。
    • keepalive_requests
      • 语法keepalive_requests number;
      • 作用设置在一个长连接上允许的最大请求数量。当达到这个数量后,连接将被关闭并重新建立新的连接。例如:keepalive_requests 100; 表示一个长连接最多处理 100 个请求后关闭。
    • sendfile
      • 语法sendfile on | off;
      • 作用用于控制是否启用高效的文件传输模式。在长连接场景下,开启 sendfile 可以进一步提高文件传输性能,减少数据在内核空间和用户空间之间的拷贝次数。例如:sendfile on; 开启该功能(默认通常是开启的,但不同系统和版本可能有差异)。
    • tcp_nodelay
      • 语法tcp_nodelay on | off;
      • 作用控制是否启用 TCP_NODELAY 选项。在长连接中,对于一些实时性要求较高的应用(如某些动态网页交互),开启 tcp_nodelay 可以减少数据传输延迟,确保数据尽快发送出去;而对于一些对实时性要求不高且注重传输效率的场景(如大量文件传输),可以关闭它以提高传输效率。例如:tcp_nodelay on; 开启该选项(默认通常是关闭的,但不同应用场景可能需要调整)。
  3. 长连接的配置场景和注意事项

    • 配置场景
      • 前端优化:对于提供网页服务的 Nginx 服务器,配置长连接可以加速网页的加载速度,特别是对于包含多个静态资源(如图片、CSS、JavaScript 文件)的网页。通过减少 TCP 连接的建立和关闭次数,提高资源的并发获取效率。
      • 后端代理:当 Nginx 作为后端应用服务器(如 Tomcat、Node.js 等)的代理服务器时,长连接可以保持与后端服务器的持久连接,减少后端服务器的连接处理开销,提高后端服务器的性能和吞吐量,同时也加快了 Nginx 与后端服务器之间的数据传输速度。
    • 注意事项
      • 服务器资源:长连接会在一段时间内保持连接处于打开状态,因此需要确保服务器有足够的资源(如内存、文件描述符等)来处理大量的长连接。否则,可能会导致服务器性能下降甚至资源耗尽。
      • 兼容性:虽然大多数现代浏览器和服务器都支持 HTTP 长连接,但在一些特定的环境或较旧的客户端中,可能存在兼容性问题。在配置长连接时,需要考虑到这些因素,可能需要进行一些兼容性测试,或者提供备用的短连接配置选项。
      • 安全考量:长连接可能会使服务器面临一些安全风险,例如长时间的连接可能被攻击者利用来进行恶意攻击(如连接劫持、慢攻击等)。因此,在配置长连接时,需要结合其他安全措施(如防火墙、入侵检测系统等)来保障服务器的安全。

二、Nginx 长连接实验

  1. 实验环境准备
    • 操作系统:CentOS 7(或其他兼容的 Linux 发行版)
    • 安装 Nginx
      • 使用 yum 包管理器进行安装(以 CentOS 为例):
      • 更新系统软件包列表:sudo yum update -y
      • 安装 Nginx:sudo yum install nginx -y
    • 创建测试资源
      • 在 Nginx 的默认网页目录(通常为 /usr/share/nginx/html)下创建一些测试文件,用于模拟网页中的资源加载。例如:
      • 创建一个简单的 HTML 文件 index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Nginx Long Connection Test</title>
</head>
<body>
    <h1>Nginx Long Connection Test</h1>
    <img src="image1.jpg" alt="Image 1">
    <img src="image2.jpg" alt="Image 2">
    <script src="script.js"></script>
</body>
</html>
  • 创建两个用于测试的图片文件 image1.jpg 和 image2.jpg(可以使用任意小尺寸的图片),以及一个简单的 JavaScript 文件 script.js
console.log("Script loaded successfully.");
  1. Nginx 配置修改
    • 打开 Nginx 的主配置文件(通常为 /etc/nginx/nginx.conf):sudo vi /etc/nginx/nginx.conf
    • 在 http 块内添加以下长连接相关的配置:
http {
    # 开启长连接,设置超时时间为 60 秒(服务器端和客户端)
    keepalive_timeout 60;
    # 一个长连接上允许的最大请求数量为 100
    keepalive_requests 100;
    # 开启高效的文件传输模式
    sendfile on;
    # 关闭 TCP_NODELAY(可根据实际情况调整)
    tcp_nodelay off;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html;
        }
    }
}
  • 保存并关闭配置文件。
  1. 实验测试步骤
    • 启动 Nginx 服务sudo service nginx start
    • 使用浏览器进行测试
      • 打开浏览器,访问 http://localhost,浏览器将加载 index.html 文件以及其中引用的图片和 JavaScript 文件。
      • 在浏览器的开发者工具中(一般按 F12 键调出),切换到 “网络” 选项卡,观察资源的加载情况。可以看到,多个资源是通过同一个 TCP 连接进行加载的,而不是为每个资源建立一个新的 TCP 连接,这表明长连接配置生效。
      • 注意观察资源加载的时间顺序和耗时情况,可以发现相比没有配置长连接时,整体页面加载速度有所提高,尤其是在加载多个小资源时,减少了连接建立和关闭的开销。
    • 使用命令行工具进行测试(可选)
      • 可以使用 curl 命令来模拟 HTTP 请求,并查看连接的相关信息。例如:
curl -v http://localhost/index.html
  • 在 curl 的输出中,可以查看 Connection 头信息,应该显示为 Keep-Alive,表示使用了长连接。同时,可以通过多次执行 curl 命令来观察连接的复用情况,以及在达到 keepalive_requests 设置的最大请求数量后,连接是否重新建立。
  1. 进一步的实验和扩展
    • 调整长连接参数:修改 keepalive_timeout 和 keepalive_requests 的值,观察对页面加载速度和服务器性能的影响。例如,增大 keepalive_timeout 可能会使长连接保持更长时间,对于频繁访问的网页可能有更好的性能表现,但也会占用更多的服务器资源;减小 keepalive_requests 可能会导致连接更频繁地关闭和重新建立,适用于对连接稳定性要求较高的场景。
    • 结合后端应用测试:如果 Nginx 作为后端应用服务器的代理,配置后端应用的长连接参数(不同后端应用的配置方式不同,如 Tomcat 可以在 server.xml 文件中配置连接相关参数),然后测试 Nginx 与后端应用之间的长连接性能,观察对整个应用系统性能的提升效果。
    • 压力测试和性能分析:使用工具(如 ab(Apache Benchmark)或 wrk 等)对配置长连接后的 Nginx 服务器进行压力测试,模拟多个并发用户请求网页资源,分析服务器的性能指标(如吞吐量、响应时间、并发连接数等),评估长连接配置在高负载情况下的优势和潜在问题,并根据测试结果进一步优化服务器配置。

通过以上实验,可以深入了解 Nginx 长连接的配置方法和实际效果,以及如何根据不同的应用场景进行优化和调整,以提高服务器的性能和用户体验。在实际的生产环境中,还需要结合具体的业务需求、服务器资源和网络状况等因素,综合考虑长连接的配置参数,确保服务器的稳定高效运行。


http://www.kler.cn/a/446446.html

相关文章:

  • 全速下载 50M/S,不限速下载就是香
  • 腾讯云云开发 Copilot 深度探索与实战分享
  • *【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落
  • Hive内部表和外部表的区别
  • 将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?
  • RabbitMQ 路由(Routing)通讯方式详解
  • 二维码:理解二维码 / 生成二维码 / 小程序支持哪种类型的二维码 / 小程序识别GS1码
  • 【postgresql初级使用】小小索引大用途,奇妙的索引让大数据查询提升成百上千倍,多种索引类型的区别,你用对索引了吗?
  • centOS定时任务-cron服务
  • javaFX.(蜜雪冰城点餐小程序)MySQL数据库
  • flask-admin的modelview 实现list列表视图中扩展修改状态按钮
  • 【Prompt Engineering】6 文本扩展
  • ML 系列:第 40 节 — 最大似然MLE 的简单问题
  • 【WRF教程第3.1期】预处理系统 WPS 详解:以4.5版本为例
  • 利用Java获取淘宝商品详情API接口的深入指南引言
  • iOS 应用的生命周期
  • 【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》
  • Apache Solr RCE(CVE-2017-12629)--vulhub
  • electron-vite打包后图标不生效问题
  • 前端实习近期小结
  • ML307R 串口开发--OpenCPU应用程序开发学习笔记(2)
  • 通过edu 邮箱免费使用 Autodesk
  • QT:Widgets中的模型/视图架构
  • 【AI驱动的设计模式:类图的智能化解读】
  • [机器学习] 决策树
  • 关于VS项目中添加第三方库出现error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法