通过Nginx反向代理数据库连接,可以实现前后端分离架构中的安全通信和数据隔离。这种方案通常用于以下场景: - 前端应用需要直接访问数据库但需要安全控制 - 微服务架构中需要统一数据访问入口 - 需要隐藏数据库真实地址和端口
http {
upstream database_cluster {
server db1.example.com:3306;
server db2.example.com:3306;
# 可以添加更多数据库服务器
}
server {
listen 3307; # 代理监听端口
location / {
proxy_pass http://database_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 数据库连接相关设置
proxy_connect_timeout 75s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
}
}
}
server {
listen 3307;
# IP白名单
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
# 基本认证
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# SSL加密
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://database_cluster;
# 其他代理设置...
}
}
# 负载均衡策略
upstream database_cluster {
least_conn; # 最少连接策略
server db1.example.com:3306 weight=3;
server db2.example.com:3306;
server backup.example.com:3306 backup;
}
# 连接池设置
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 65;
keepalive_requests 100;
性能考虑:
协议支持:
替代方案:
安全风险:
更安全的前后端分离架构应该是:
前端 → Nginx → API服务 → 数据库
而非直接让前端通过Nginx访问数据库。这种架构更符合前后端分离的最佳实践。