本文最后编辑于 前,其中的内容可能需要更新。
看到网上对于proxy_pass有很多分析, 有的分析写的很复杂,不便于快速学习和使用。所以写下自己的理解,力求简单。
proxy_pass其实可以看作简单的url替换,这个替换有两种:
- 当proxy_pass仅带有host和port时,仅仅替换host和port;
- 当proxy_pass带有path时(包括’/‘),用指定的uri替换location所匹配的uri;
例如:
nginx.conf中这样配置:
1 2 3
| location /api/ { proxy_pass http://127.0.0.1:3000; }
|
这里proxy_pass不带有path部分,则仅替换host和port; 如请求http://hostname/api/xxx
则替换为http://127.0.0.1:3000/api/xxx
.
当proxy_pass带上path部分,如:
1 2 3
| location /api/ { proxy_pass http://127.0.0.1:3000/; }
|
则会将请求http://hostname/api/xxx
替换为http://127.0.0.1:3000/xxx
.
下面是更多例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 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,请注意这里的双斜杠。 }
|