proxy_pass是Nginx中最常用的反向代理指令之一,用于将请求转发到后端服务器。下面我将通过几个典型实例来分析proxy_pass的配置方法。
location /path/ {
proxy_pass http://backend_server;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
说明: - 将所有访问example.com的请求转发到本机的8080端口 - 设置了Host和X-Real-IP请求头,确保后端服务器能获取原始信息
location /api/ {
# 保留路径前缀
proxy_pass http://backend/api/;
# 或者去除路径前缀
# proxy_pass http://backend/;
}
区别:
- 第一种配置会将/api/user
转发为http://backend/api/user
- 第二种配置会将/api/user
转发为http://backend/user
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
server 10.0.0.3:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
说明: - 使用upstream定义后端服务器组 - Nginx会自动在三个服务器间进行负载均衡
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
说明: - 特殊配置支持WebSocket协议 - 需要设置Upgrade和Connection头 - 延长超时时间以保持长连接
location ~ ^/service/(.*) {
proxy_pass http://backend/$1$is_args$args;
}
说明:
- 使用正则表达式匹配路径
- 将/service/后的内容作为参数传递给后端
- $is_args$args
保留原始查询参数
502 Bad Gateway错误
proxy_connect_timeout
值404 Not Found错误
性能优化建议
proxy_cache
proxy_buffer_size
proxy_http_version 1.1; proxy_set_header Connection "";
通过以上实例,您可以根据实际需求灵活配置Nginx的反向代理功能。如需更复杂的配置,可以结合rewrite、if等指令实现更精细的控制。