Nginx 支持 TCP 和 UDP 代理,通常用于负载均衡、反向代理等场景。以下是详细说明及案例:

1. TCP/UDP 代理配置

Nginx 从 1.9.0 版本开始支持 TCP 代理,1.9.13 版本开始支持 UDP 代理。需要在编译时启用 --with-stream 模块。

1.1 基本配置

nginx.conf 中添加 stream 块来配置 TCP/UDP 代理。

stream {
    upstream backend {
        server 192.168.1.101:3306;
        server 192.168.1.102:3306;
    }

    server {
        listen 3306;
        proxy_pass backend;
    }
}

1.2 UDP 代理配置

UDP 代理需要在 listen 指令中指定 udp 参数。

stream {
    upstream dns_servers {
        server 192.168.1.103:53;
        server 192.168.1.104:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_servers;
    }
}

2. 案例

2.1 MySQL TCP 代理

假设有两台 MySQL 服务器,希望通过 Nginx 进行负载均衡。

stream {
    upstream mysql_servers {
        server 192.168.1.101:3306;
        server 192.168.1.102:3306;
    }

    server {
        listen 3306;
        proxy_pass mysql_servers;
    }
}

2.2 DNS UDP 代理

假设有两台 DNS 服务器,希望通过 Nginx 进行负载均衡。

stream {
    upstream dns_servers {
        server 192.168.1.103:53;
        server 192.168.1.104:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_servers;
    }
}

3. 高级配置

3.1 健康检查

Nginx 支持 TCP/UDP 健康检查,确保后端服务器可用。

stream {
    upstream backend {
        server 192.168.1.101:3306;
        server 192.168.1.102:3306;
        health_check interval=10 fails=3 passes=2;
    }

    server {
        listen 3306;
        proxy_pass backend;
    }
}

3.2 SSL 终止

Nginx 可以在 TCP 代理中终止 SSL 连接。

stream {
    upstream backend {
        server 192.168.1.101:3306;
        server 192.168.1.102:3306;
    }

    server {
        listen 3306 ssl;
        proxy_pass backend;
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
    }
}

4. 总结

Nginx 的 TCP/UDP 代理功能强大,适用于多种场景,如数据库负载均衡、DNS 负载均衡等。通过合理配置,可以提高系统的可用性和性能。

本篇文章内容来源于:Nginx TCP/UDP代理详细说明以及案例