Nginx:proxy_pass指令

proxy_pass 指令在 Nginx 中是实现反向代理和负载均衡的重要指令。

一. 反向代理

在反向代理的场景下,proxy_pass 指令用于将接收到的请求转发给另一个后端服务器。后端服务器地址可以是 IP 地址加端口、域名加端口、或者一个完整的 URL。

注意事项

proxy_pass 后面的 URL 末尾是否存在 / 的处理逻辑不同。如果在 proxy_pass 后面的 URL 加 /,表示绝对根路径;如果没有 /,表示相对路径,可能会把匹配的路径部分也给代理走。

示例如下:

情况一
nginx 复制代码
location /api/ {
	proxy_pass http://localhost:8080/;
}

location /V1/ {
	proxy_pass http://localhost:8080/api/;
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/test。

对于访问 http://example.com/V1/data,Nginx 会将其转发到 http://localhost:8080/api/data。

注意:如果 proxy_pass 指令包含了一个 URI 路径(/api/),Nginx 会将这个路径与原始请求 URI 中匹配 location 块后剩余的部分(data)进行拼接。在拼接时,,Nginx 会确保路径的拼接是正确的,并且没有不必要的双斜杠(//)。

情况二
nginx 复制代码
location /api/ {
	proxy_pass http://localhost:8080;
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/api/test。

情况三
nginx 复制代码
location /V1 {
	proxy_pass http://localhost:8080/api;
}

对于访问 http://example.com/V1/data,Nginx 会将其转发到 http://localhost:8080/api/data。

注意:确保 location 块和 proxy_pass 指令的路径部分要么都加斜杠(/),要么都不加斜杠。

情况四
nginx 复制代码
location ~ /api/ {
	proxy_pass http://localhost:8080;        # 不可以写成 8080/...
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/test。

注意:当 location 使用正则表达式来匹配请求的 URI 时,proxy_pass 应该只包含主机名和端口号,而不应该包含任何 URI 路径。

二. 负载均衡

在负载均衡的场景下,proxy_pass 指令与 upstream 模块一起使用,用于将请求分发到多个后端服务器中的一个。

nginx 复制代码
upstream backend-servers {  
    server srv1.example.com;  
    server srv2.example.com;  
    server srv3.example.com;  
}  

server {
	listen 80;
	server_name   www.example.com;

	location /api/ {
		proxy_pass  http://backend-servers;
	}
}

负载均衡默认使用的是轮询算法,按照时间先后来分发请求,第一个 request 走 srv1.example.com,第二个 request 走 srv2.example.com ... 以此类推。

相关推荐
硅基手札1 分钟前
MCP 实战 —— 从零写一个 CRC16 服务器(保姆级)
运维·服务器·ai
今年下半年16 分钟前
【运维】windows虚拟机安装arm(aarch64)服务器
运维·windows·arm·虚拟机·aarch64
杨云龙UP21 分钟前
TDengine Community 超级表建表实战:统一21个TAG与DOUBLE/字符串数据模板
运维·服务器·数据库·时序数据库·tdengine·涛思数据·stable建表
高山有多高37 分钟前
【Linux笔记】冯诺依曼体系结构
linux·运维·笔记
筑梦之路1 小时前
Alibaba Cloud Linux 4 IPXE全自动安装(直连官方源)——筑梦之路
linux·运维·服务器·国产化·阿里云操作系统
Pointer Pursuit1 小时前
make / Makefile
linux·运维·服务器
ZhangJun951 小时前
Linux常用命令笔记,中高级运维高频指令,并附上vim常见操作
linux·运维·centos·云计算·vim
逐流人1 小时前
Ceph对象存储与文件系统存储管理:从RADOS网关、S3与Swift到CephFS快照同步
linux·运维·ceph·云原生·云计算·swift·rados
分布式存储与RustFS2 小时前
日志目录的预算是 2 GiB:轮转、保留和压缩这三件事
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
wdfk_prog2 小时前
Wi-Fi Direct 教程 05:control socket 与 eloop——P2P_FIND 怎样进入 wpa_supplicant 命令解析器
运维·服务器·后端·网络协议·ubuntu·p2p·wifi-direct