Nginx作为反向代理时的工作流程: 1. 客户端发起请求到Nginx服务器 2. Nginx根据配置规则决定将请求转发到哪个后端服务器 3. 后端服务器处理请求并返回响应给Nginx 4. Nginx将响应返回给客户端
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Nginx支持多种负载均衡算法:
nginx
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
}
nginx
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
nginx
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
Nginx Plus提供主动健康检查,开源版可通过第三方模块或被动检查实现:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
Nginx Plus支持动态配置更新: - 通过API动态添加/移除后端服务器 - 运行时调整服务器权重
连接池优化:
upstream backend {
server backend1.example.com;
keepalive 32; # 连接池大小
}
缓冲区优化:
proxy_buffers 8 16k;
proxy_buffer_size 32k;
proxy_busy_buffers_size 64k;
超时设置:
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
缓存优化:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
upstream production {
server app1.example.com;
server app2.example.com;
}
upstream staging {
server app3.example.com;
}
server {
listen 80;
# 通过Cookie分流
set $upstream "production";
if ($http_cookie ~* "version=staging") {
set $upstream "staging";
}
location / {
proxy_pass http://$upstream;
}
}
TCP/UDP流代理(需要stream模块)
stream {
upstream backend {
server backend1.example.com:12345;
server backend2.example.com:12345;
}
server {
listen 12345;
proxy_pass backend;
}
}
location /api/user/ {
proxy_pass http://user_service/;
}
location /api/order/ {
proxy_pass http://order_service/;
}
日志分析:
log_format proxy_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_addr $upstream_response_time';
access_log /var/log/nginx/proxy.log proxy_log;
状态监控:
nginx
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
常见问题排查:
通过深入理解这些原理和实现细节,可以构建高性能、高可用的反向代理和负载均衡架构,满足各种复杂业务场景的需求。