nginx如何配置长连接、短连接、WebSocket?

发布于:2025-03-22 ⋅ 阅读:(35) ⋅ 点赞:(0)

0. 运维干货分享

在 Nginx 中,您可以通过配置来控制长连接、短连接以及 WebSocket 的使用。以下是每种连接的配置方法及其实现原理:

1. 配置长连接

在 Nginx 中,HTTP 协议默认是支持长连接的,通过设置 keepalive 参数来实现。长连接允许客户端和服务器之间复用同一个连接来发送多个请求,从而减少频繁的连接建立和关闭带来的开销。

配置示例:

http {
    # 全局配置
    keepalive_timeout 65; # 设置超时时间,65秒后关闭连接(默认为75秒)
    keepalive_requests 100; # 在关闭连接之前,允许的最大请求数量

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_server;
            proxy_http_version 1.1;
            proxy_set_header Connection keep-alive;
        }
    }
}

参数说明:
  • keepalive_timeout`: 设置空闲连接的超时时间。超过此时间没有新的请求,Nginx 将关闭连接。
  • keepalive_requests: 设置在关闭连接之前允许的最大请求数量。默认是 100,超过这个数量后,Nginx 会关闭连接。

2. 配置短连接

短连接通常是不使用 keep-alive 的连接。在短连接模式下,每次请求完成后连接都会立即关闭。

配置示例:
http {
    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_server;
            proxy_http_version 1.1;
            proxy_set_header Connection close; # 禁用长连接
        }
    }
}

nginx
参数说明:
  • proxy_set_header Connection close: 明确告诉服务器在请求完成后关闭连接,这样每次请求都会使用新的连接,达到短连接的效果。

3. 配置 WebSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,通常用于实时应用。配置 WebSocket 需要确保在反向代理时支持 WebSocket 协议的连接升级。

配置示例:
http {
    server {
        listen 80;
        server_name example.com;

        location /ws/ {
            proxy_pass http://backend_server;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 可选的 WebSocket 相关设置
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
        }
    }
}

nginx
参数说明:
  • proxy_http_version 1.1: 使用 HTTP 1.1 版本,它支持 WebSocket 的连接升级。
  • proxy_set_header Upgrade $http_upgrade: 将 HTTP 请求头中的 Upgrade 设置为 WebSocket 协议升级。
  • proxy_set_header Connection “Upgrade”: 确保连接升级,支持 WebSocket 全双工通信。
  • proxy_read_timeout 和 proxy_send_timeout: 设置 WebSocket 的读取和发送超时时间,防止连接过早关闭。

4. 总结与使用场景

  • 长连接:适合高频次的请求,如 API 调用、持续的数据传输等。通过 keepalive 配置实现,可以提高传输效率。
  • 短连接:适用于请求频率较低的场景,如静态资源加载。配置简单,设置 Connection: close 即可。
  • WebSocket:适合实时性要求高的场景,如聊天应用、实时通知、在线游戏等。通过支持连接升级的配置使 Nginx 代理 WebSocket 成为可能。

根据应用需求配置 Nginx,可以在实现灵活的连接管理的同时,优化服务器的性能与资源使用。