server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。
location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。
常用的正则表达式
1)精确匹配
location=/{}=为精确匹配/,主机名后不能携带任何字符串,比如/和/data,则/匹配,/data不匹配2)一般匹配/通用匹配
location/{}代表已/开头,所以这条规则将匹配所有的请求location/documents/{}匹配任何已/documents/开头的地址,匹配符合后,还会继续往下搜索其他location,只有其它location后面的正则表达式没有匹配到时,才会用这一条正则匹配location^~/images/{}匹配任何已/images/开头的地址,匹配符合后,停止往下搜索,采用这一条location~*\.(gif|jpg|jpeg)${}匹配所有gifjpg或jepg结尾的请求如果有上面的location^~/images/{}匹配则会先匹配上一请求,所以到不了这一条。4.location优先级排列说明等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。^~类型表达式。一旦匹配成功,则不再查找其他匹配项。正则表达式类型(和*)的优先级次之。常规字符串匹配类型(不带任何修饰符的匹配),按前缀匹配。/test通用匹配(/),如果没有其它匹配,任何请求都会匹配到。location优先级总结如果是匹配路径:(location=完整路径)>(location^~完整路径)>(location~*完整路径)>(location~完整路径)>(location/)通用匹配用目录做匹配访问某个文件(location=目录)>(location~目录/)>(location~目录)>(location~*目录)>(location目录)>(location/)
现在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器,虽然也能做跳转,规则库也很强大,所以用Nginx跳转效率会更高。
rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求rewrite只能在server{}location{}if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
Rewrite跳转场景主要包括以下几种
rewrite执行顺序如下:
rewrite
flag标记说明:last:本条规则匹配完成后,继续向下匹配新的locationURL规则,一般用在server和if中break:本条规则匹配完成即终止,不再匹配后面的任何规则。一般用在location中redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url(因为是临时)。permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url。