location匹配有三种方法:完全匹配,正则匹配,通用匹配。
精确匹配:location = / { ... }
正则匹配:location - / { ... }
一般匹配:location / { ... }
location通过uri来匹配资源。uri:统一资源标识符,是一种字符串标准,用于表示抽象的或者物理资源。
匹配规则:
=:精确匹配
^~:匹配普通字符,但是是前缀匹配,
~:区分大小写的匹配
~*:不区分大小写的匹配
!~:区分大小写的匹配,取反
!~*:不区分大小写的取反
匹配优先级:越精确优先级越高。
locatio = > location ^- > location ~* > location /test/ > location /
生产中location匹配规则:
1,必选规则:location = / {} 直接匹配根网站。通过域名访问网站是最多的,使用精确匹配可以加快处理速度。
2,location ^~ /staic/ {} 处理静态文件的请求,目录匹配。
3,location ~* .(gif|jpg|png|css) 匹配图片用的.
4,通用规则:location / { proxy_pass } 转发动态请求,反向代理,将php,.Jsp请求转发到后端。
rewrite:重写,重定向
rewrite使用NGINX的全局变量或者是自己设置的变量媒介和正则表达式和标志位实现url的重定向。
x_forwarded_for:用于获取HTTP请求头中的X-Forwarded-For字段的值。
X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。
proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。
X-Real-IP:头部为客户端真实IP地址
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。
这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。
$remote_addr:客户端的IP地址。
$remote_port:客户端的端口号。
$server_addr:服务器的IP地址。
$server_port:服务器的端口号。
default_type text/plain;
表示如果没有在其他地方显示设置:content-type的头字段,默认响应为text/plain;纯文本格式。text/html:默认的响应类型,也就是我们说的页面。
text/plain:纯文本格式,类似于.txt文件
text/css: CSs样式表的类型,.css
text/javascript : java脚本,.js。前端文件,也可以理解是java解析的程序文件。|
Reweite使用NGINX的全局变量或者是自己设置的变量结合正则表达式和标志位实现url的重定向。
Rewrite执行顺序:
- 执行server块中的rewrite
- 执行location匹配
- 如果location当中还有rewrite,继续执行。
- 不停rewrite,会死循环,循环10次后报错500
Rewrite语法:
Rewrite <regex> <replacemnet> [flag]
Rewrite:开始重定向
Regex:正则匹配的规则
Replacemnet:表示跳转后的内容,你要重定向的url
Flag:标志位。
标志位:last,break,permanent,redirect。
last #表示完成rewrite,之后继续向下匹配新的location URI规则,浏览器地址栏URL地址不变。
break #本条规则匹配完成后,终止匹配, 不再匹配后面的规则,完成重写指令,浏览器地址栏URL地址不变。
redirect #返回302临时重定向,浏览器地址会显示跳转新的URL地址。
permanent #返回301永久重定向,浏览器地址会显示跳转新的URL地址。