Nginx代理proxy pass配置去除前缀

Nginx代理proxy pass配置去除前缀

很多时候,我们需要根据url的前缀转发到不同的服务。

比如url的前缀对下游的服务是不需要的,除非下游服务添加context-path, 但很多时候我们并不喜欢加这个。如果Nginx转发的时候,把这个前缀去掉就好了。

一个种方案是proxy_pass后面加根路径/

location /user/ {
    proxy_set_header Host $host;
    proxy_set_header  X-Real-IP        $remote_addr;
    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://user/;
}

location /order/ {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Scheme  $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://order/;
}

/user/表示匹配前缀是user的请求,proxy_pass的结尾有/, 则会把/user/*后面的路径直接拼接到后面,即移除user.

要注意proxy_pass后的url最后的/
当加上了/,相当于是加了路径,则nginx不会保留location中匹配的路径部分
如果没有/,则会把匹配的路径部分保留

另一种方案是使用rewrite

location /user/ {
    proxy_set_header Host $host;
    proxy_set_header  X-Real-IP        $remote_addr;
    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;

    rewrite ^/user/(.*)$ /$1 break;
    proxy_pass http://user;
}

location /order/ {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Scheme  $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 重写URL 去除order
    rewrite ^/order/(.*)$ /$1 break;
    #  关键字 正则表达式 代替的内容 重写类型
    #  rewrite后面的参数是一个简单的正则 ^/order/(.*)$,

    proxy_pass http://order;
}

注意到proxy_pass结尾没有/rewrite重写了url

nginx location、proxy_pass 后面的url 加与不加/的区别

在nginx中配置proxy_pass时,当在后面加上 / ,相当于绝对路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径代理走。

情况1:

# `http://192.168.1.9/proxy/test.html` 进行访问

location  /proxy/ {
    proxy_pass http://127.0.0.1:81/;
}
会被代理到http://127.0.0.1:81/test.html 这个url。

location  /proxy {
    proxy_pass http://127.0.0.1:81/;
}
会被代理到http://127.0.0.1:81//test.html 这个url。  # 请注意这里的双斜线

情况2:

# `http://192.168.1.9/proxy/test.html` 进行访问

location  /proxy/ {
    proxy_pass http://127.0.0.1:81;
}
会被代理到http://127.0.0.1:81/proxy/test.html 这个url。

location  /proxy {
    proxy_pass http://127.0.0.1:81;
}
会被代理到http://127.0.0.1:81/proxy/test.html 这个url。

情况3:

# `http://192.168.1.9/proxy/test.html` 进行访问

location  /proxy/ {
    proxy_pass http://127.0.0.1:81/fly/;
}
会被代理到http://127.0.0.1:81/fly/test.html 这个url。


location  /proxy {
    proxy_pass http://127.0.0.1:81/fly/;
}
会被代理到http://127.0.0.1:81/fly//test.html 这个url。  请注意这里的双斜杠。

情况4:

# `http://192.168.1.9/proxy/test.html` 进行访问

location  /proxy/ {
    proxy_pass http://127.0.0.1:81/fly;
}
会被代理到http://127.0.0.1:81/flytest.html 这个url。  请注意这里的fly和test.html之间没有斜杠


location  /proxy {
    proxy_pass http://127.0.0.1:81/fly;
}
会被代理到http://127.0.0.1:81/fly/test.html 这个url。

参考

1.https://www.cnblogs.com/woshimrf/p/nginx-proxy-rewrite-url.html

2.https://blog.csdn.net/leiwuhen92/article/details/131210712

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇