解析网站制作,做网站下载那个数据库好,零基础学平面设计难吗,企业公司网站模版URI#xff1a;统一资源标识符#xff0c;是一种字符串标识#xff0c;主要是用于标识抽象的或者是物理资源#xff08;主要是指一些文件视频等等#xff09;
常用的Nginx正则表达式
^ 匹配输入字符串的起始位置#xff08;以......开头#xff09;
$ 匹配输入…URI统一资源标识符是一种字符串标识主要是用于标识抽象的或者是物理资源主要是指一些文件视频等等
常用的Nginx正则表达式
^ 匹配输入字符串的起始位置以......开头
$ 匹配输入字符串的结束位置以......结尾
* 匹配前面的字符零次或多次 匹配前面的字符一次或多次 匹配前面的字符零次或一次
. 匹配除“\n”之外的任何单个字符若要匹配包括“\n”在内的任意字符需要用“[.\n]”
\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用转义字符
\d 匹配纯数字【0-9】
{n} 重复n次
{n} 重复n次或更多次
{nm} 重复n到m次
[ ] 定义匹配的字符范围
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
[a-zA-Z0-9] 匹配所有大小写字母或数字 表达式的开始和结束位置
| 或运算符
location匹配规则和优先级重点
location匹配方式 1.精确匹配 location / {.....} 2.正则匹配 location ~ / {......} 3.一般匹配 location / {.......}
location匹配规则 精确匹配完全匹配必须是完全一致的 ^~匹配普通的字符前缀匹配 ~区分大小写匹配 ~*不区分大小写匹配 ~区分大小写匹配 并且取反 ~*不区分大小写匹配 并且取反
location 匹配优先级
注越精准越匹配 一旦匹配成功便不再向下匹配 精准匹配 大于 正则匹配 ~ 大于 通用匹配 / 优先级 location location ^~ location ~* location /指定的路径 location / nginx常用变量必须掌握
使用nginx的全局变量或者是自己设置的变量结合正则而表达式和标志位来实现url的重定向
nginx的内置变量
$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指令 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头部的值传递给后端服务器
匹配示例 location / { root html; index index.html index.htm; default_type text/plain; return 200 way:$request_method; } default_type test/plain;
表示如果没有其他地方显示设置contenr-type字段默认响应test/plain;纯文本格式
text/html默认的响应类型也就是我们说的页面。
test/plain纯文本文件类似于.txt文件
test/cssCSS样式表的类型 .css
test/javasciptjava脚本js脚本也可以说是前端文件也可以理解为java解析的是程序文件
注nginx默认支持很多的类型但是如果不声明只是展示默认的html类型其他的类型会自动下载下来展示 location / { [ configuration A ] } 精确匹配为精确匹配 / 主机名后面不能带任何字符串 比如访问 / 和 /data则 / 匹配/data 不匹配 就不可以进行匹配 location / { [ configuration B ] } 因为所有的地址都以 / 开头所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配 /data 也匹配越匹配越精确越精确优先级越高 location /documents/ { [ configuration C ] } 匹配任何以 /documents/ 开头的地址匹配符合以后还要继续往下搜索其它 location 只有其它 location后面的正则表达式没有匹配到时停止匹配 location ^~ /images/ { [ configuration D ] } 匹配任何以 /images/ 开头的地址 location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } 匹配所有以 gif、jpg或jpeg 结尾的请求 然而所有请求 /images/ 下的图片会被 location ^~ /images/ 处理因为 ^~ 的优先级更高 生产上如何进行匹配 #第一个必选规则 直接匹配网站根通过域名访问网站首页比较频繁使用精确匹配可以加快处理速度 可以是一个静态首页也可以直接转发给后端应用服务器 location / { root html; index index.html index.htm; } #第二个必选规则 处理静态文件请求这是nginx作为http服务器的强项 有两种配置模式目录匹配或后缀匹配,任选其一或搭配使用 location ^~ /static/ { root /webroot/static/; } location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; } #第三个规则 就是通用规则比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器 非静态文件请求就默认是动态请求 location / { proxy_pass http://tomcat_server; } rewrite:重定向功能掌握理解
rewrite简介
rewrite功能 使用nginx提供的全局变量或自己设置的变量结合正则表达式和标记位实现URL重写以及重定向。
比如 更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
rewrite只能放在server{},location{},if{}中并且默认只能对域名后边的除去传递的参数外的字符串起作用 例如
http://www.kgc.com/abc/bbs/index.php?a1b2 只对/abc/bbs/index.php重写
rewrite跳转实现
Nginx 通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断但不支持else 跳转 从一个 location跳转到另一个location循环最多可以执行10次超过后nginx将返回500错误
PCRE支持 perl兼容正则表达式的语法规则匹配。另外该模块需要 PCRE 支持应在编译 Nginx 时指定 PCRE 支持默认已经安装
重写模块 set 指令 创建新的变量并设其值 使用rewrite进行匹配跳转 使用if匹配全局变量后跳转 使用location匹配在跳转 rewrite放在server{}、if{}、location{}段中 location只对域名后边的除去传递参数外的字符串起作用 rewrite执行顺序
1.先执行server块中的rewrite的
2.执行loaction匹配
3.如果loaction当中还有rewrite,继续执行
不停rewrite死循环只能10次然后服务端报错并且日志中会表面
报错的状态码500
rewrite语法
rewrite 正则表达式regexreplacement[flag]
rewrite表示开始重定向
regex正则匹配的规则
replacement表示跳转后的内容你要重定向url
flag标志位
重点会问
permanent永久重定向返回状态码301永久性的变更url搜索引擎会转移权重以及排名到新的url
redirect临时重定向返回状态码302主要用于短期变更或者升级更新这个时候搜索引擎并不会转移权重和排名到新的url
304表示获取的本地的缓存
break是重定向但是不会改变url而且只会请求一次跳出当前匹配即刻终止
last本条规则配置完成之后继续向下匹配只要有last就会继续匹配匹配的时候需要注意防止死循环但是nginx只能匹配10次
注意当日志出现rewrite or internal redirection cycle while processing #写成死循环一直在匹配location10次返回码500.
rewrite 实例
基于域名的跳转 现在公司旧域名www.kgc.com有业务需求变更需要使用新域名www.benet.com代替但是旧域名不能废除需要跳转到新域名上而且后面的参数保持不变 vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.kgc.com; #域名修改 #charset utf-8; #access_log /var/log/nginx/kgc.com-access.log; #日志修改 location / { #添加域名重定向 if ($host www.kgc.com){ #$host为rewrite全局变量代表请求主机头字段或主机名 rewrite ^/(.*)$ http://www.benet.com/$1 permanent; #在重定向时$1表示请求的URL } root html; index index.html index.htm; } } echo 本机IP www.kgc.com www.benet.com /etc/hosts systemctl restart nginx 基于客户端 IP 访问跳转 今天公司业务新版本上线要求所有 IP 访问任何内容都显示一个固定维护页面只有公司 IP 20.0.0.50访问正常。 vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.kgc.com; #域名修改 charset utf-8; access_log /var/log/nginx/kgc.com-access.log; #日志修改 #设置是否合法的IP标记 set $rewrite true; #设置变量$rewrite变量值为boole值true #判断是否为合法IP if ($remote_addr 20.0.0.70){ #当客户端IP为20.0.0.70时将变量值设为false不进行重写 set $rewrite false; } #除了合法IP其它都是非法IP进行重写跳转维护页面 if ($rewrite true){ #当变量值为true时进行重写 rewrite (.) /error.html; #重写在访问IP后边插入/error.html例如20.0.0.60/error.html } location /error.html { root html; #网页返回html/error.html的内容 } location / { root html; index index.html index.htm; } } systemctl restart nginx