结论: 在nginx中配置proxy_pass时,如果在proxy_pass后面的url加/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分给代理走。
验证
#接口说明 部署的服务器host:10.96.33.157 , port: 8881
#接口访问路径1 http://10.96.33.157:8881/aaa/b 可获取到结果字符串 "hello word /aaa/b"
#接口访问路径2 http://10.96.33.157:8881/aaa/b/c 可获取到结果字符串 "hello word /aaa/b/c"
#接口访问路径3 http://10.96.33.157:8881/aaa/b/cde 可获取到结果字符串 "hello word /aaa/b/cde"
# 在nginx中配置proxy_pass时,如果在proxy_pass后面的url加/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分给代理走。
# 测试1 http://localhost:8181/aaa/b 访问成功
# 测试1 http://localhost:8181/aaa/b/c 访问成功
# 测试1 http://localhost:8181/aaa/b/cde 访问成功
# 测试1 http://localhost:8181/a/aaa/b 404
# 测试1 http://localhost:8181/a/aaa/b/c 404
# 测试1 http://localhost:8181/a/aaa/b/cde 404
#location /a {
# proxy_pass http://10.96.33.157:8881;
#}
# 测试1 http://localhost:8181/aaa/b 404
# 测试1 http://localhost:8181/aaa/b/c 404
# 测试1 http://localhost:8181/aaa/b/cde 404
# 测试1 http://localhost:8181/a/aaa/b 访问成功
# 测试1 http://localhost:8181/a/aaa/b/c 访问成功
# 测试1 http://localhost:8181/a/aaa/b/cde 访问成功
# 测试1 http://localhost:8181/aaaa/b 访问成功
# 测试1 http://localhost:8181/aaaa/b/c 访问成功
# 测试1 http://localhost:8181/aaaa/b/cde 访问成功
location /a {
proxy_pass http://10.96.33.157:8881/;
}
完整的nginx配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
map $time_iso8601 $logdate{
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
access_log logs/access-$logdate.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8181;
server_name localhost;
access_log logs/access-$logdate.log main;
#接口说明 部署的服务器host:10.96.33.157 , port: 8881
#接口访问路径1 http://10.96.33.157:8881/aaa/b 可获取到结果字符串 "hello word /aaa/b"
#接口访问路径2 http://10.96.33.157:8881/aaa/b/c 可获取到结果字符串 "hello word /aaa/b/c"
#接口访问路径3 http://10.96.33.157:8881/aaa/b/cde 可获取到结果字符串 "hello word /aaa/b/cde"
# 在nginx中配置proxy_pass时,如果在proxy_pass后面的url加/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分给代理走。
# 测试1 http://localhost:8181/aaa/b 访问成功
# 测试1 http://localhost:8181/aaa/b/c 访问成功
# 测试1 http://localhost:8181/aaa/b/cde 访问成功
# 测试1 http://localhost:8181/a/aaa/b 404
# 测试1 http://localhost:8181/a/aaa/b/c 404
# 测试1 http://localhost:8181/a/aaa/b/cde 404
#location /a {
# proxy_pass http://10.96.33.157:8881;
#}
# 测试1 http://localhost:8181/aaa/b 404
# 测试1 http://localhost:8181/aaa/b/c 404
# 测试1 http://localhost:8181/aaa/b/cde 404
# 测试1 http://localhost:8181/a/aaa/b 访问成功
# 测试1 http://localhost:8181/a/aaa/b/c 访问成功
# 测试1 http://localhost:8181/a/aaa/b/cde 访问成功
# 测试1 http://localhost:8181/aaaa/b 访问成功
# 测试1 http://localhost:8181/aaaa/b/c 访问成功
# 测试1 http://localhost:8181/aaaa/b/cde 访问成功
location /a {
proxy_pass http://10.96.33.157:8881/;
}
}
}