Nginx之路径匹配与参数修改

摘要:资源进行分离,jsp ,html,img的动静分离,对于不同的后缀结尾的数据,匹配到不同的服务器上。同时,路径的匹配还可以用于做url的重写,修改url的请求格式,将/age/name/email修改为 age=?&name=?&email=?的格式 localtion语法 匹配模式 语言法 例子

资源进行分离,jsp ,html,img的动静分离,对于不同的后缀结尾的数据,匹配到不同的服务器上。同时,路径的匹配还可以用于做url的重写,修改url的请求格式,将/age/name/email修改为 age=?&name=?&email=?的格式

002UASMrzy7605pjKJv15&690.jpg

localtion语法 匹配模式 语言法 例子 精准匹配 localtion=pattern{} location = /50x.html( error_page 500 502 503 504 /50x.html;) 一般匹配 localtion pattern location /goods (/goodsxxx的访问匹配) 正则匹配 localtion ~pattern{} location ~ .jsp$(以jsp结尾的文件)

备注。pattern表示的是表达式

以xx结尾的

upstream myapp{ server 192.168.100.10:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.100.10:8081 weight=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name localhost; #charset koi8-r; access_log yellow/yellow.access.log main; #任何以jsp结尾的请求 .jsp$ location ~ .jsp$ { #root html; #index index.html index.htm; proxy_set_header X-real-ip $remote_addr; proxy_pass http://myapp; } //错误页面信息配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

 

语法判断

#虚拟主机配置: server { listen 1234; server_name bhz.com; location / { #正则表达式匹配uri方式:在/usr/local/nginx/bhz.com下 建立一个test123.html 然后使用正则匹配 #location ~ test { ## 重写语法:if return (条件 = ~ ~*) #ip判断,当ip是192.168.1.200 ,返回404 if ($remote_addr = 192.168.1.200) { return 404; } #当user_agent(浏览器)是火狐的,就跳转到火狐页面 # ~* 表示包含 firefox的 ,不区分大小写的匹配 if ($http_user_agent ~* firefox) { #^.*$ 表示当前的请求地址 rewrite ^.*$ /firefox.html; # #直接退出,不然就会有两个请求问题,报错4040 break; } #默认是的文档节点是 yellowcong.com root yellowcong.com; index index.html; } #判断商品的路径 location /goods { #{1,5} 表示1-5位的数字 #商品为goods-121.html rewrite "goods-(d{1,5}).html" /goods-ctrl.html?id=$(1); #路径 root yellowcong.com; #页面 index index.html; } #配置访问日志 access_log logs/yellowcong.com.access.log main; } 参数修改

通过修改$args来修该请求的参数。

location /testnnnn{ set $args "foo=1&bar=2"; proxy_pass http://localhost:8080/testnnnn; } url重写

对于localtion可以像分组一样,对url进行分组,获取到传递的参数,然后传递到后台

#将/info/22/yellowcong/717350389@11.com 转化为 /info?age=12&name=yellowcon&email=717350389 #[0-9]表示 0-9 范围i 数字 也可以使用d+ #+ 表示1个或多个 #w+ 表示是字符串 #$ 表示结尾 rewrite ^/info/([0-9]+)/(w+)/(w+)$ /info?age=$1&name=$2&email=$3 ; break;