在 Nginx 配置文件中,root 和 alias 都用于指定文件系统中的路径,以便在处理请求时找到相应的资源
1.root 和 alias 的区别
/var/www/html
├── index.html
├── images
│ └── pic.jpg
└── static
└── app.js
我们要将 /var/www/html 目录作为网站的根目录,并处理以下两种情况:
/ 请求时返回 index.html 。
/images/ 请求时返回 /var/www/html/images/ 下的文件。
root
示例:
server {
listen 80;
server_name example.com;
# 根路径
location / {
root /var/www/html;
# 将会找到 /var/www/html/index.html
}
# images 文件夹
location /images/ {
root /var/www/html;
# 请求 /images/pic.jpg 时,Nginx 将去查找 /var/www/html/images/pic.jpg
}
}
alias
示例:
server {
listen 80;
server_name example.com;
# 根路径
location / {
root /var/www/html;
}
# images 文件夹
location /images/ {
alias /var/www/html/images/;
# 请求 /images/pic.jpg 时,Nginx 会直接查找 /var/www/html/images/pic.jpg
}
}
2.流量镜像功能
之前做过日志收集的系统 使用的方案是发送请求时同步调用日志服务器的数据数据收集接口 等于一次请求要发送两次的http请求 如果采用镜像可能会更优雅些
示例:
location / {
mirror /mirror;
proxy_pass http://backend;
}
location = /mirror {
internal; # 路径只能被 Nginx 内部请求访问
proxy_pass http://test_backend$request_uri;
}
3. Nginx常用的内置变量
4. Nginx location 匹配规则
路径匹配,优先级:(跟 location 的书写顺序关系不大)
- 精确匹配 :
=前缀的指令严格匹配这个查询。
如果找到,停止搜索。 - 普通字符匹配 :
所有剩下的常规字符串,最长的匹配。
如果这个匹配使用^〜前缀,搜索停止。 - 正则匹配 :
正则表达式,在配置文件中定义的顺序,匹配到一个结果,搜索停止; - 默认匹配 :
如果第3条规则产生匹配的话,结果被使用。
否则,如同从第2条规则被使用。
示例:
location = /exact { ... } # 精准匹配
location ^~ /images/ { ... } # 通配前缀匹配
location /images/pictures/ { ... } # 普通前缀匹配
location / { ... } # 默认前缀匹配
location ~ \.jpg$ { ... } # 区分大小写的正则匹配
location ~* \.png$ { ... } # 不区分大小写的正则匹配
- 请求 /exact:匹配 location = /exact,因为它是精准匹配。
- 请求 /images/abc.jpg:匹配 location ^~ /images/,因为通配前缀匹配优先于正则。
- 请求 /images/pictures/123.jpg:匹配 location /images/pictures/,因为它是最长的普通前缀匹配。
- 请求 /test.jpg:匹配 location ~ .jpg$,因为它符合正则匹配。
- 请求 /test.png:匹配 location ~* .png$,因为它符合不区分大小写的正则匹配。
- 请求 /other:匹配 location /,因为它是最后的通用匹配。
未完待续...
评论 (0)