欢迎观临
路漫漫其修远兮,吾将上下而求索

Nginx中proxy_pass问题

看到网上对于proxy_pass有很多分析, 有的分析写的很复杂,不便于快速学习和使用。所以写下自己的理解,力求简单。

proxy_pass其实可以看作简单的url替换,这个替换有两种:

  • 当proxy_pass仅带有host和port时,仅仅替换host和port;
  • 当proxy_pass带有path时(包括’/’),用指定的uri替换location所匹配的uri;

例如:

nginx.conf中这样配置:

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部分,如:

location /api/ {
    proxy_pass http://127.0.0.1:3000/;
}

则会将请求http://hostname/api/xxx替换为http://127.0.0.1:3000/xxx.

下面是更多例子:

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,请注意这里的双斜杠。
}
赞(3) 打赏
未经允许不得转载:云海鹰影博客 » Nginx中proxy_pass问题
分享到: 更多 (0)

欢迎留言 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏