今天公司在进行方向代理时需要将两个不同系统的请求互相转发,于是使用Nginx反向代理来实现,通过nginx接收全部请求,然后按指定规则分别转发到两个不同系统的后端服务器。在配置中有一些关于斜杠'/'用法的细节在此记录。

测试

Nginx代理访问地址:http://localhost:8090/api/test;

配置一1:location、proxy_pass都不加斜杠

location  /api {
	proxy_pass http://localhost:8081;
}

反向代理后地址:http://localhost:8081/api/test;

配置二:location加斜杠、proxy_pass不加斜杠

location  /api/ {
	proxy_pass http://localhost:8081;
}

反向代理后地址:http://localhost:8081/api/test;

配置三:location不加斜杠、proxy_pass加斜杠

location  /api {
	proxy_pass http://localhost:8081/;
}

反向代理后地址:http://localhost:8081//test;

配置四:location、proxy_pass都加斜杠

location  /api/ {
	proxy_pass http://localhost:8081/;
}

反向代理后地址:http://localhost:8081/test;

结论

  • proxy_pass代理地址端口后无任何字符,转发后地址:代理地址+端口号后URL

  • proxy_pass代理地址端口后有目录(仅一个斜杠' /'也算目录 ),转发后地址:代理地址+端口号后URL然后去除location后的字段("api"或"api/")

  • 实际上location后的字段末尾加不加斜杠("api"或"api/")只会影响拼接后去除的字段。实际使用中需要先确定proxy_pass字段结尾斜杠的具体情况来控制location后的字段要不要加斜杠。