Nginx不仅可以作为HTTP反向代理,还可以作为TCP/UDP流量的反向代理。以下是详细的配置方法和案例。
确保你的Nginx编译时包含了--with-stream
模块。在nginx.conf的全局部分添加:
load_module modules/ngx_stream_module.so;
stream {
server {
listen 3306; # 监听本机3306端口
proxy_pass db_server:3306; # 转发到后端MySQL服务器
}
}
stream {
upstream db_backend {
server db1.example.com:3306 weight=5;
server db2.example.com:3306;
server db3.example.com:3306 backup;
}
server {
listen 3306;
proxy_pass db_backend;
proxy_connect_timeout 1s;
}
}
stream {
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
proxy_pass backend_servers;
}
}
stream {
server {
listen 53 udp;
proxy_pass dns_servers;
proxy_timeout 1s;
}
upstream dns_servers {
server 8.8.8.8:53;
server 8.8.4.4:53;
}
}
stream {
upstream mysql_read {
server read1.example.com:3306;
server read2.example.com:3306;
}
upstream mysql_write {
server write.example.com:3306;
}
server {
listen 3306;
proxy_pass mysql_write;
}
server {
listen 3307;
proxy_pass mysql_read;
}
}
stream {
server {
listen 2222;
proxy_pass backend_ssh;
proxy_connect_timeout 1s;
}
upstream backend_ssh {
server 192.168.1.10:22;
server 192.168.1.11:22;
}
}
stream {
proxy_buffer_size 16k;
proxy_timeout 30s;
server {
listen 5432;
proxy_pass postgres_servers;
proxy_connect_timeout 2s;
proxy_socket_keepalive on;
}
}
tail -f /var/log/nginx/error.log
error_log /var/log/nginx/error.log debug;
通过以上配置,你可以灵活地实现各种TCP/UDP服务的反向代理和负载均衡。