目录
location匹配
正则表达式
三种location匹配
匹配规则
匹配的优先级
生产中的匹配规则
rewrite
rewrite执行顺序
X_Forwarded_For
X-Real-IP
nginx的内置变量
content-type
rewrite的语法
元字符
. 任意单个字符
^ 起始位置
$ 结束位置
*匹配前边的字符0次或者多次
+匹配前面的字符一次或多次
? 匹配一次或0次
\ 转义符
[0-9A-Za-z] 匹配0-9 A-Z a-z
[a] 只能匹配a
{n} 连续重复出现n次
{n,m}最少出现n次,最多出现m次
| 逻辑或
正则表达式匹配的是文件内容
1.精确匹配 location = / {…}
2.正则匹配 location ~ / {…}
3.一般匹配 location / {…}
= 精确匹配,必须完全一致,负责无法匹配
^~ 匹配普通字符,是前缀匹配
~ 区分大小写的匹配
~* 不区分大小写的匹配
~$ 结束位置
!~ 区分大小写的取反匹配
!~* 不去分大小写的取反匹
越精确,优先级越高
= 优先级最高
~ 优先级次之
/ 优先级最低
location = 大于 location ^~ 大于location ~* 大于location /test/ 大于location /
一旦匹配成功,不在向下匹配
第一个必选规则
location = / {} 直接匹配根网站,通过域名访问网站首页最多,使用精确匹配可以加快处理速度
第二个规则
location ^~ /test/ {}
用于处理静态页面,目录匹配
第三个规则
location ~* .(gif|jip|png|css) 匹配图片
第四个规则
location / {
proxy_pass #指定代理,反向代理转发动态请求。.php .jsp的请求发到后端
}
重定向,rewrite使用nginx全局变量或是自己设置的变量,结合正则表达式和标志位实现URL的重定向
1、执行server块当中的rewrite的
2、执行location匹配
3、如果location当中还有rewrite,继续执行。
不停的rewrite会陷入死循环,十次后报错,报错状态码:500
用于获取HTTP请求头中的X-Forwarded-For字段的值。 X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。 proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。
头部为客户端真实IP地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。 这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。
$uri: 请求的URI,不包含主机和查询参数。
$request_uri: 请求的URI,包含主机和查询参数。
$args: 查询参数部分,即?后面的内容。
$query_string: 整个查询字符串,包含?。
$host: 请求的主机名。
$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。
$http_referer: 请求的Referer头信息,表示当前页面的来源URL。
$remote_addr: 客户端的IP地址。 $remote_port: 客户端的端口号。 $server_addr: 服务器的IP地址。
$server_port: 服务器的端口号。
$request_method: 请求的HTTP方法,如GET、POST、等。
$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。
$content_length: 请求的Content-Length头信息,表示请求体的长度。
$scheme: 请求的协议,通常是http或https。
$request_filename: 请求的文件名,用于指定请求的实际文件路径。 $document_root: 当前请求的根目录。 $server_name: 服务器名称,用于匹配server块的server_name指令。
location / {
root html; index index.html index.htm;
default_type text/plain; return 200 "way:$request_method";
}
default_type text/plain;
表示如果没有在其他地方显示设置: conte
nt-type的头字段,默认响应为text/plain纯文本格式
text/plain默认响应类型,也就是页面
text/plain 纯文本格式,类似于.txt
text/css CSS样式的类型
text/javascript Java脚本,.js 前端文件,也可以理解为Java解析的程序文件
rewrite
rewrite 开始重定向
regex 正则匹配的规则
replacement 替换内容,重定向的新url路径
[flag] 标志位
permnaent 永久重定向 返回码301
redirect 临时重定向返回码302
永久重定向 301 会永久性的变更URL,搜索引擎会转移它的权重以及排名到新的URL
临时重定向: 302,用于短期变更(网站维护,或者升级更新)索引擎不会转移它的权重以及排名到新的URL
304 表示获取的是本地缓存
break 是重定向,但不会改变URL,而且只会请求一次,并跳出当前匹配,即刻终止
last 本条规则匹配完成后,继续向下匹配,匹配时要注意防止死循环
rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location,10次,返回码500