【补档】Nginx 学习(一)proxy_pass 反代路由的替换和 root 与 alias 的区别
本文最后更新于 996 天前,其中的信息可能已经有所发展或是发生改变。

因为一开始没整理归类文件的习惯,把手头的主力开发机弄得很乱,索性就备份了些重要文件重装了电脑,然后就把服务器的 Nginx 配置文件全丢了......剩下服务器上一堆没注释的配置连自己都看晕了,就重新学下吧。


Nginx 反代路由的替换在同一服务器部署多项目是还是很常用的,比方说我有一个将 https://ceshiku.cn/tiny-server-proxy/ 反代到本地的 57191 端口的需求,但是又不想影响到主路由和其他项目地址例如 https://ceshiku.cn/test/ 的解析。
我肯定不能这么写:

location ^~ /tiny-server-proxy {
    proxy_pass http://localhost:57191;
}

为什么呢,如果我这么写的话,那当我访问 https://ceshiku.cn/tiny-server-proxy/status 的时候,虽然能被代理到指定端口上运行的项目,但是实际上项目收到的请求路由是这样的:

错误路由

很明显多出来的 /tiny-server-proxy/ 其实是我不需要的,那我改一下:

location ^~ /tiny-server-proxy/ {
    proxy_pass http://localhost:57191;
}

结果收到的路由呢,如下:

错误路由

依旧是多了 /tiny-server-proxy/ 这个路径,可见在路由匹配上下功夫是没有用的,只能在 proxy_pass 后反代的端口上做更改:

location ^~ /tiny-server-proxy/ {
    proxy_pass http://localhost:57191/;
}

再试一下,果然可以了:

正常路由

那么 Nginx 反代到端口项目时路由部分路径替换的问题就解决了。


那么碰到动静分离的项目,想要访问静态资源时替换路径有该怎么操作呢,这个时间就要搬出除了 root 之外 Nginx 另一个资源映射语法了:alias

location ^~ /t/ {
    root /www/root/html/;
}

location ^~ /t/ {
    alias /www/root/html/;
}

当路由和文件夹配置完全一样的情况下,当请求链接是 /t/a.html 的情况下,两个配置分别会:
root 的配置会返回 /www/root/html/t/a.html 的文件,alias 的配置会返回 /www/root/html/a.html 的文件,alias 所起的作用就和刚刚往反代端口后加的斜杠类似,做到因为把 location 后面配置的路径完全舍弃。
但是用的时候还需要注意:alias 只能位于 location 块中(root 可以不放在 location 中)。

暂无评论

发送评论 编辑评论


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