Nginx不同拦截名代理相同静态资源(alisa和root)
下面的内容同样适用与Linux系统。
1、配置静态资源代理
以前配置Nginx都是使用/
来进行静态资源代理。这样就直接加载资源目录下面的文件了,类似下面这样:
在D盘下新建一个html的文件夹,文件夹下有一个index.html文件,现在就需要代理访问到index.html文件,配置如下:
server {
#代理监听的接口
listen 8000;
server_name localhost;
#代理拦截的静态资源路径 : /
location / {
root D:\html;
index index.html index.htm;
}
}
上面的配置就是只要是访问到了localhost:8000端口就会将请求代理到index.html。访问结果如下:
现在的需求是配置不同的站点访问到相同的静态资源文件。 配置信息如下:
server {
listen 8000;
server_name localhost;
location / {
root D:\html;
index index.html index.htm;
}
#站点1
location /test1 {
root D:\html;
index index.html;
}
#站点2
location /test2 {
root D:\html;
index index.html;
}
}
上面新加的两项配置是通过访问localhost:8000/test1和localhost:8000/test2都能访问到D:\html文件夹中的index.html文件,But…
事实就是并不能通过拦截test1和test2f访问到D:\html\index.html文件。
原因就是使用root配置资源路径,nginx进行资源代理的时候会将代理拦截添加到资源路径的后面,如: D:\html\test1\index.html
这样肯定就访问不到资源了啊,因为根本就不存在test1这个文件夹以及文件夹中index.html文件(请自动忽略图1中的两个test1和test2文件夹)。
假设自己新建指定的目录test1和test2,如图1,并且将index.html复制到这两个文件夹中并且将内容略作需改,再次访问localhost:8000/test1和localhost:8000/test2请求,结果:
神奇的是访问到了!不过这样做也不太友好,不可能在每一个拦截里面部署相同的资源。
下面就是解决怎么使用不同的拦截名,代理到相同的静态资源。 经过我一番查找资料,找到了解决方案:
server {
listen 8000;
server_name localhost;
location / {
root D:\html;
index index.html index.htm;
}
location /test1 {
root D:\html;
index index.html;
}
location /test2 {
root D:\html;
index index.html;
}
#又新加的两个代理方案test3和test4
#使用alisa别名指定资源路径
location /test3 {
alias D:\html;
index index.html;
}
#要注意下面这两种情况:如果test3后面加上/那么虚拟路径的后面就一定要加。
#如果test3后面不加/,那么虚拟路径后面加不加都行,或者是都不加默认会加上。
#location /test3/ {
# alias D:\html/;
# index index.html;
#}
#location /test3 {
# alias D:\html/;
# index index.html;
#}
location /test4 {
alias D:\html;
index index.html;
}
}
如上的配置信息/test3和test4来代理D:\html下的资源文件,不同的是路径的配置方式由root变成了alisa,访问结果如下:
这两个请求都能够正确代理相同的资源文件,说明配置成功了!可以通过站点test3和站点test4来访问相同的资源文件了。
注!以上的配置信息在Linux系统中同样生效,不同的是需要更改root或者alisa中指定的文件路径。
2、root和alisa的区别
- root
root指的是实际路径(目录上层路径定义),拦截的path需要添加到实际路径的后面,资源会在拼接之后的url中查找。
- alias
alias指的是虚拟路径(目录别名定义),拦截的path不会添加到虚拟路径的后面,资源会直接在虚拟路径中查找。
3、window系统下nginx命令使用
以下的命令需要在DOS窗口下,进入到nginx.exe所在目录下执行。
-
启动
nginx.exe #不建议使用这种方式启动,这样启动窗口会暂停,不能执行其他命令 start nginx.exe
-
停止
#两种任选其一 nginx.exe -s quit nginx.exe -s stop
-
重加载配置文件
nginx.exe -s reload
-
查看nginx版本信息
nginx.exe -v
4、参考文章
https://www.nginx.cn/4658.html
https://www.cnblogs.com/zhangqunshi/p/6866522.html