nginx的proxy_pass各种用法详解

420 阅读1分钟

1. 访问地址

访问地址:http://localhost/proxy/abc.html

以下是几种常见的匹配情况:

第一种:代理到端口

访问地址:http://localhost/proxy/abc.html

location /proxy/ {
    proxy_pass http://127.0.0.1:8080/;
}

代理到:http://127.0.0.1:8080/abc.html

该方式通过参数proxy代理到了整个tomcat

第二种:

访问地址:http://localhost/proxy/abc.html

location /proxy/ {
    proxy_pass http://127.0.0.1:8080;
}

相对于第一种proxy_pass缺少/
代理到:http://127.0.0.1:8080/proxy/abc.html

第三种:

访问地址:http://localhost/proxy/abc.html

location /proxy/ {
    proxy_pass http://127.0.0.1:8080/api/;
}

代理到:http://127.0.0.1:8080/api/abc.html

第四种:

location /proxy/ {
    proxy_pass http://127.0.0.1:8080/api;
}

相对第三种少/
代理到:http://127.0.0.1:8080/apiabc.html

location /proxy {
    proxy_pass http://127.0.0.1:8080/api;
}

代理到:http://127.0.0.1:8080/api/abc.html

第五种:

location /proxy {
    proxy_pass http://127.0.0.1:8080/;
}

代理到:http://127.0.0.1:8080//abc.html
注意此处有两个反斜杠//

location /proxy {
    proxy_pass http://127.0.0.1:8080;
}

代理到:http://127.0.0.1:8080/proxy/abc.html

举例:

server {
   listen       80;
   server_name  localhost;
 
   location /api1/ {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api1/xxx -> http://localhost:8080/api1/xxx
 
 
   location /api2/ {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api2/xxx -> http://localhost:8080/xxx
 
 
   location /api3 {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api3/xxx -> http://localhost:8080/api3/xxx
 
 
   location /api4 {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api4/xxx -> http://localhost:8080//xxx,请注意这里的双斜线,好好分析一下。
 
 
   location /api5/ {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api5/xxx -> http://localhost:8080/hahaxxx,请注意这里的haha和xxx之间没有斜杠,分析一下原因。
 
   location /api6/ {
           proxy_pass http://localhost:8080/haha/;
        }
   # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx
 
   location /api7 {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api7/xxx -> http://localhost:8080/haha/xxx
 
   location /api8 {
           proxy_pass http://localhost:8080/haha/;
        }
  # http://localhost/api8/xxx -> http://localhost:8080/haha//xxx,请注意这里的双斜杠。
}