Nginx配置:location中的proxy_pass和alias的简介

一、alias和proxy_pass介绍

一般情况下,前端包等静态资源可以使用alias来设置;后端的api接口可以使用proxy_pass来设置。一个简单的前后端分离的系统就可以通过这两个关键字完成配置。

#一般用来访问前端包等静态资源,alias 直接访问本机的资源
location ^~ /local-res/{
	alias /usr/local/nginx/html/local-res/
	index index.html index.htm;
}

#一般用来访问后端api接口等,proxy_pass把请求转发到其他服务,访问远程资源(当然也可以还是转到本机的另一个服务端口)
location ^~ /remote-res/{
	proxy_pass http://192.168.1.1:8080/remote-res/
}

二、location后的路径

首先location后面的路径是为了匹配,如果和请求传来的url可以匹配并优先级较高则会采用这个location中的逻辑(使用这个location大括号中的处理方式)。

1. 判断是否匹配
  • ^~ : 非正则匹配,表示普通字符匹配。表示阻断匹配不再向下继续匹配,得到的最长的location不是 ^~ 类型则继续匹配;(一般最常用
  • / : 普通匹配(/xxx);
  • ~ : 表示正则匹配,区分大小写;
  • ~* : 表示正则匹配,不区分大小写;
  • @ : “@” 定义一个命名的 location,使用在内部定向时,例如 error_page;
  • = : 完全匹配,精确匹配后面的url。
2. 判断优先级
  • =:严格匹配,若有严格匹配成功,则优先级最高;
  • / 或 ^~:普通匹配,哪个匹配的更长,哪个优先级高;
  • ~ 或~*:正则匹配,按照在配置文件中从上倒下的顺序,上面的优先级高。
3. 另外

在包含alias关键字的location语句后的路径一般都会以“/”结尾,为了避免“穿越目录漏洞”。因为如果location后面的路径没有以“/”结尾,如下图所示。那么当用户输入xxx.com/example…/的时候,会被解析到/usr/local/nginx/html/…,导致“穿越目录漏洞”的出现。

location ^~ /example{
	alias /usr/local/nginx/html/
	index index.html index.htm;
}

三、proxy_pass或alias后的路径

  1. proxy_pass和alias后面添加什么
    proxy_pass后面添加的“域名/ip+端口号”,代表本地或者远程的某个服务进程;而alias后面是本地的路径,代表着本地的资源。
  2. proxy_pass的斜杠“/”问题

以下例子均以访问 http://192.168.0.1:8080/example/test.html ,192.168.0.1:8080所对应的nginx会把这个请求转发给192.168.0.2:8080 为例。

如果proxy_pass只包含了ip(或域名)和端口号,所以转发的时候会拼接上location的路径,如:

#以下这个例子会拼接“/example/”,所以转发到的url为http://192.168.0.2:8080/example/test.html
location  /example/ {
    proxy_pass http://192.168.0.2:8080;
}

如果proxy_pass 不仅包含 了ip(或域名)和端口号还 包含了其他路径(即使只多了一个“/”也算,因为“/”也是根路径),所以转发的时候会不会拼接上location的路径,如:

#以下这个例子除了ip和域名还有“/”,所以不会拼接“/example/”,则转发到的url为http://192.168.0.2:8080/test.html
location  /example/ {
    proxy_pass http://192.168.0.2:8080/;
}
#以下这个例子除了ip和域名还有“/abc”,所以不会拼接“/example/”,则转发到的url为http://192.168.0.2:8080/abctest.html
location  /example/ {
    proxy_pass http://192.168.0.2:8080/abc;
}
#以下这个例子除了ip和域名还有“/abc/”,所以不会拼接“/example/”,则转发到的url为http://192.168.0.2:8080/abc/test.html
location  /example/ {
    proxy_pass http://192.168.0.2:8080/abc/;
}
#以下这个例子除了ip和域名还有“/example”,所以不会拼接“/example/”,则转发到的url为http://192.168.0.2:8080/example/test.html
location  /example/ {
    proxy_pass http://192.168.0.2:8080/example/;
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值