Nginx的代理模块(proxy module)是其最常用的功能之一,主要用于反向代理和负载均衡。以下是详细的使用方法:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
}
}
location / {
proxy_pass http://backend_server;
# 设置代理请求头
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_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
# 缓冲区设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
# 其他设置
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server backend3.example.com backup;
# 负载均衡算法
least_conn; # 最少连接
# ip_hash; # IP哈希
# hash $request_uri consistent; # 一致性哈希
}
server {
location / {
proxy_pass http://backend;
}
}
location /ws/ {
proxy_pass http://backend_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400; # 长连接超时
}
location / {
proxy_pass https://backend_server;
proxy_ssl_certificate /path/to/client.crt;
proxy_ssl_certificate_key /path/to/client.key;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /path/to/trusted_ca.crt;
proxy_ssl_session_reuse on;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
后端应用需要从这些头部读取真实IP。
client_max_body_size 100m;
proxy_request_buffering off;
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";
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
查看代理请求头:
proxy_set_header X-Debug-Proxy "true";
记录代理日志:
log_format proxy_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'proxy: $proxy_host $upstream_addr';
access_log /var/log/nginx/proxy.log proxy_log;
使用curl测试代理:
curl -v -H "Host: example.com" http://nginx-server/test
以上是Nginx代理模块的基本和高级用法,根据实际需求选择合适的配置方式。