2015做微网站多少钱,简单的seo网站优化排名,wordpress图标,广告投放平台有哪些六、重写功能 rewrite
Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求#xff0c;此功能依靠 PCRE(perl compatible regular expression)#xff0c;因此编译之前要安装PCRE库#xff0c;rewrite是nginx服务器的重要功能之一#xff0c;用于实现URL的…六、重写功能 rewrite
Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求此功能依靠 PCRE(perl compatible regular expression)因此编译之前要安装PCRE库rewrite是nginx服务器的重要功能之一用于实现URL的重写URL的重写是非常有用的功能比如它可以在我们改变网站结构之后不需要客户端修改原来的书签也无需其他网站修改我们的链接就可以设置为自动访问另外还可以在一定程度上提高网站的安全性。
1. ngx_http_rewrite_module模块指令 官方文档: Module ngx_http_rewrite_module 1.1 if指令
用于条件匹配判断并根据条件判断结果选择不同的Nginx配置可以配置在server或location块中进行配置Nginx的if语法仅能使用if做单次判断不支持使用if else或者if elif这样的多重判断
用法如下
if 条件匹配 { action
}
使用正则表达式对变量进行匹配匹配成功时if指令认为条件为true否则认为false变量与表达式之间使用以下符号链接 #比较变量和字符串是否相等相等时if指令认为该条件为true反之为false
! #比较变量和字符串是否不相等不相等时if指令认为条件为true反之为false
~ #区分大小写字符可以通过正则表达式匹配满足匹配条件为真不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配不满足匹配条件为真满足匹配条件为假~* #不区分大小写字符可以通过正则表达式匹配满足匹配条件为真不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配满足匹配条件为假不满足匹配条件为真-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件目录软链接)#注意
#如果$变量的值为空字符串或0则if指令认为该条件为false其他条件为true。
#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false 3字打头重定向 301 永久重定向 将缓存记录在浏览器中 302 临时重定向 没有缓存 每次都要重定向 1.2 return
return用于完成对请求的处理并直接向客户端返回响应状态码比如:可以指定重定向URL(对于特殊重定向状态码301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等)处于此指令后的所有配置都将不被执行return可以在server、if 和 location块进行配置
www.m.com/test/
404
return code; #返回给客户端指定的HTTP状态码
return code [text]; #返回给客户端的状态码及响应报文的实体内容可以调用变量,其中text如果有空格,需要用单或双引号
return code url; #返回给客户端的URL地址 1.3 set 指令
指定key并给其定义一个变量变量可以调用Nginx内置变量赋值给key另外set定义格式为set $key valuevalue可以是text, variables和两者的组合。
location /main {root /data/nginx/html/pc;index index.html;default_type text/html;set $name abc;echo $name;set $my_port $server_port(nginx 自带的变量 服务端口 一般80);echo $my_port;
}
1.4 break 指令
用于中断当前相同作用域(location)中的其他Nginx配置与该指令处于同一作用域的Nginx配置中位于它前面的配置生效位于后面的 ngx_http_rewrite_module 模块中指令就不再执行Nginx服务器在根据配置处理请求的过程中遇到该指令的时候回到上一层作用域继续向下读取配置该指令可以在server块和locationif块中使用
注意: 如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行
使用语法如下
if ($slow) {limit_rate 10k;break;
}
location /main {root /data/nginx/html/pc;index index.html;default_type text/html;set $name kgc;echo $name;break; #location块中break后面指令还会执行set $my_port $server_port;echo $my_port;}
2. rewrite 指令
通过正则表达式的匹配来改变URI可以同时存在一个或多个指令按照顺序依次对URI进行匹配rewrite主要是针对用户请求的URL或者是URI做具体处理
rewrite可以配置在 server、location、if
语法格式
rewrite可以配置在 server、location、if
语法格式
rewrite regex replacementwww.baidu.com [flag];正则匹配原始访问url 替代你想让客户访问的 标志 ()premanent301 redirect302 break last
rewrite将用户请求的URI基于regex所描述的模式进行检查匹配到时将其替换为表达式指定的新的URI
注意如果在同一级配置块中存在多个rewrite规则那么会自下而下逐个检查;被某条件规则替换完成后会重新一轮的替换检查隐含有循环机制,但不超过10次;如果超过提示500响应码[flag]所表示的标志位用于控制此循环机制如果替换后的URL是以http://或https://开头则替换结果会直接以重定向返回给客户端, 即永久重定向 301
正则表达式格式
. #匹配除换行符以外的任意字符
\w #匹配字母或数字或下划线或汉字
\s #匹配任意的空白符
\d #匹配数字 [0-9]
\b #匹配单词的开始或结束
^ #匹配字符串的开始
$ #匹配字符串的结束
* #匹配重复零次或更多次#匹配重复一次或更多次
? #匹配重复零次或一次
{n} #匹配重复n次
{n,} #匹配重复n次或更多次
{n,m} #匹配重复n到m次
*? #匹配重复任意次但尽可能少重复
? #匹配重复1次或更多次但尽可能少重复
?? #匹配重复0次或1次但尽可能少重复
{n,m}? #匹配重复n到m次但尽可能少重复
{n,}? #匹配重复n次以上但尽可能少重复
\W #匹配任意不是字母数字下划线汉字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非数字的字符
\B #匹配不是单词开头或结束的位置
[^x] #匹配除了x以外的任意字符
[^kgc] #匹配除了kgc 这几个字母以外的任意字符
2.1 rewrite flag 使用介绍
利用nginx的rewrite的指令可以实现url的重新跳转rewrtie有四种不同的flag分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag后两种是代理型 跳转型指由客户端浏览器重新对新地址进行请求 代理型是在WEB服务器内部实现跳转
rewrite 格式
Syntax: rewrite regex replacement [flag]; #通过正则表达式处理用户请求并返回替换后的数据包。
Default: —
Context: server, location, if
flag 说明
redirect;302
#临时重定向重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端由客户端重新发起请求;使用相对路径,或者http://或https://开头状态码302permanent;301 www.bj.com www.beijing.com
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端由客户端重新发起请求状态码301break; www.bj.com
#重写完成后,停止对当前URL在当前location中后续的其它重写操作而后直接跳转至重写规则配置块之后的其它配置;结束循环建议在location中使用
#适用于一个URL一次重写 last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作而后对新的URL启动新一轮重写检查不建议在location中使用
#适用于一个URL多次重写要注意避免出现超过十次以及URL重写后返回错误的给用户301
2.2 重写例子
访问 bj 等于访问 beijing永久重定向 http 转 https
#要先做ssllocation / { #针对全站跳转if ( $scheme http ) { #如果不加条件判断会导致死循环rewrite /(.*) https://$host/$1 permanent;}
}3. 防盗链
防盗链基于客户端携带的referer实现referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息如果别人只链接了自己网站图片或某个单独的资源而不是打开了网站的整个页面这就是盗链referer就是之前的那个网站域名正常的referer信息有以下几种
none#请求报文首部没有referer首部比如用户直接在浏览器输入域名访问web网站就没有referer信息。blocked#请求报文有referer首部但无有效值比如为空。server_names#referer首部中包含本主机名及即nginx 监听的server_name。arbitrary_string#自定义指定字符串但可使用*作通配符。示例: *.kgc.org www.kgc.*regular expression#被指定的正则表达式模式匹配到的字符串,要使用~开头例如~.*\.kgc\.com
7-1中
清空子配置文件 下载图片 7-2中 真机中
C:\Windows\System32\drivers\etc 不可读问题解决 测试 实现盗链
server {listen 80;server_name www.pc.com;root /mnt/html;location ~* \.(jpg|gif|swf|jpeg|bmp)$ {valid_referers none blocked *.pc.com pc.com;if ( $invalid_referer ) {return 403;}}
}可以更换错误图片 七、反向代理
正向代理代理客户端去访问服务器反向代理代理服务端
反向代理reverse proxy指的是代理外网用户的请求到内部的指定的服务器并将数据返回给用户的一种方式这是用的比较多的一种方式。
Nginx 除了可以在企业提供高性能的web服务之外另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理不同的协议就是Nginx服务器与其他服务器进行通信的一种规范主要在不同的场景使用以下模块实现不同的功能
ngx_http_proxy_module #将客户端的请求以http协议转发至指定服务器进行处理
#提供http代理
ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组
#负载均衡
ngx_stream_proxy_module#将客户端的请求以tcp协议转发至指定服务器处理
#四层代理
ngx_http_fastcgi_module#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module #将客户端对Python的请求以uwsgi协议转发至指定服务器处理 #fastcgivim /apps/nginx/conf/nginx.conf 同构和异构
#7层协议
同构协议代理服务器两边请求一样
异构协议代理服务器两边请求不一样 1. http 协议反向代理
1.1 反向代理配置参数
#官方文档https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
proxy_pass;
#用来设置将客户端请求转发给的后端服务器的主机可以是主机名(将转发至后端服务做为主机头首部)、IP
地址端口的方式
#也可以代理到预先设置的主机群组需要模块ngx_http_upstream_module支持#示例:
10.0.0.8/weblocation /web {index index.html;proxy_pass http://10.0.0.18:8080; #8080后面无uri,即无 / 符号,需要将location后面url 附加到proxy_pass指定的url后面,此行为类似于root
#proxy_pass指定的uri不带斜线将访问的/web,等于访问后端服务器
http://10.0.0.18:8080/web/index.html即后端服务器配置的站点根目录要有web目录才可以被访问# http://nginx/web/index.html http://10.0.0.18:8080/web/index.htmlproxy_pass http://10.0.0.18:8080/; #8080后面有uri,即有 / 符号,相当于置换,即访问/web时实际返回proxy_pass后面uri内容.此行为类似于alias #proxy_pass指定的uri带斜线等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端} # http://nginx/web/index.html http://10.0.0.18:8080#重启Nginx测试访问效果
#curl -L http://www.kgc.org/web#如果location定义其uri时使用了正则表达式模式(包括~,~*,但不包括^~)则proxy_pass之后必须不能使用uri; 即不能有/ ,用户请求时传递的uri将直接附加至后端服务器之后
server {...server_name HOSTNAME;location ~|~* /uri/ {proxy_pass http://host:port; #proxy_pass后面的url 不能加/}...}http://HOSTNAME/uri/ -- http://host/uri/proxy_hide_header field;
#用于nginx作为反向代理的时候在返回给客户端http响应时隐藏后端服务器相应头部的信息可以设置
在http,server或location块
#示例: 隐藏后端服务器ETag首部字段location /web {index index.html;proxy_pass http://10.0.0.18:8080/; proxy_hide_header ETag;}proxy_pass_header field;
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数如果
要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部给客户端,同时不再响应报中显示前端服务器的Server字段
proxy_pass_header Server;
proxy_pass_header Date;proxy_pass_request_body on | off;
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块默认即为开启proxy_pass_request_headers on | off;
#是否将客户端的请求头部转发给后端服务器可以设置在http,server或location块默认即为开启
1.2 实现单台反向代理
主机IP服务代理服务器172.168.1.11nginx真实服务器172.168.1.12httpd客户机172.168.1.13
代理服务器
真实服务器 客户机 1.2.1 做防火墙规则
#在真实服务器上 做防火墙规则
iptables -A INPUT -s 172.168.1.11 -j DROP
客户端再次访问 会出现504网关超时有可能只是处理时间久服务器不一定挂了时间较长1分钟没有定义代理超时时间 iptables -A INPUT -s 172.168.1.11 -j REJECT
客户端再次访问 会出现502一般出现502 代表后端真实服务器挂了 1.2.2 总结
#502和504区别
502 一般出现502代表后端真实服务器挂了
504 网关超时 有可能只是单纯处理时间久服务器不一定挂了#加 / 和不加 /
加 / 是替换显示 welcome to my world 是将 location 上的url 替换后 proxy 配置里的连接
不加 / 是追加显示 api 是将 location 上的url 追加在后面
1.3 实现反向代理 动静分离 1.4 缓存功能
关闭后端服务器后图片无法访问
缓存功能默认关闭需要开启
proxy_cache zone_name | off; 默认off
#指明调用的缓存或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容默认值proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长定义在http{...}中示例:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 必须放在http语句中
proxy_cache_path path [levelslevels] [use_temp_pathon|off]
keys_zonezone_name:size [inactivetime] [max_sizesize] [manager_filesnumber]
[manager_sleeptime] [manager_thresholdtime] [loader_filesnumber]
[loader_sleeptime] [loader_thresholdtime] [purgeron|off]
[purger_filesnumber] [purger_sleeptime] [purger_thresholdtime];#示例在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径proxy_cache会自动创建levels1:2:2 #定义缓存目录结构层次1:2:2可以生成2^4x2^8x2^82^201048576个目录keys_zoneproxycache:20m #指内存中缓存的大小主要用于存放key和metadata如使用次数,一般1M可存放8000个左右的keyinactive120s #缓存有效时间 max_size10g; #最大磁盘占用空间磁盘存入文件内容的缓存空间最大值#调用缓存功能需要定义在相应的配置段如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下可直接使用过期的缓存响应客户端#示例
proxy_cache_use_stale error http_502 http_503;proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存GET和HEAD方法总是被缓存
效果实现
vim /apps/nginx/conf/nginx.conf
proxy_cache_path /data/nginx/proyxcache levels1:1:1 keys_zoneproxycache:20m inactive120s max_size1g; proxy_cache proxycache;
proxy_cache_key $request_uri;
#proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 302 301 10m;
proxy_cache_valid any 5m; 清缓存
rm -rf /data/nginx/proxycache/* 1.5 IP 透传
#proxy_set_header X-Real-IP $remote_addr;
#只添加客户端IP到请求报文头部,转发至后端服务器proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#添加客户端IP和反向代理服务器IP到请求报文头部 1.6 反向代理负载均衡
在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器而且不能对后端服务器提供相应的服务器状态监测Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
server address [parameters];
#配置一个后端web服务器配置在upstream内至少要有一个server服务器配置。
#server支持的parameters如下
weightnumber #设置权重默认为1,实现类似于LVS中的WRR,WLC等
max_connsnumber #给当前后端server设置最大活动链接数默认为0表示没有限制
max_failsnumber #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeouttime #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用如果发现可用,则将后端服务器参与调度,默认为10秒
backup #设置为备份服务器当所有后端服务器不可用时,才会启用此备用服务器 sorry server 自己不能转自己
down #标记为down状态
resolve #当server定义的是主机名的时候当A记录发生变化会自动应用新IP而不用重启Nginxhash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算使consistent参数将使用ketama一致性ip_hash;
#源地址hash调度方法基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算以实现会话保持least_conn;
#最少连接调度算法优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC
效果实现
upstream web { server 172.168.1.12:8080 调度算法server 172.168.1.13:8080
}location / {
proxy_pass http://web/
}
7-1 7-2 7-3 测试 这时停掉一个机器 加权轮询 文章转载自: http://www.morning.pghry.cn.gov.cn.pghry.cn http://www.morning.fcftj.cn.gov.cn.fcftj.cn http://www.morning.ltqzq.cn.gov.cn.ltqzq.cn http://www.morning.bmgdl.cn.gov.cn.bmgdl.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.fxwkl.cn.gov.cn.fxwkl.cn http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn http://www.morning.zbpqq.cn.gov.cn.zbpqq.cn http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn http://www.morning.mbrbk.cn.gov.cn.mbrbk.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.pclgj.cn.gov.cn.pclgj.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.frfnb.cn.gov.cn.frfnb.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.rkyw.cn.gov.cn.rkyw.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.sknbb.cn.gov.cn.sknbb.cn http://www.morning.rtsdz.cn.gov.cn.rtsdz.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.nykzl.cn.gov.cn.nykzl.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.nytgk.cn.gov.cn.nytgk.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn http://www.morning.sypby.cn.gov.cn.sypby.cn http://www.morning.knpmj.cn.gov.cn.knpmj.cn http://www.morning.fnxzk.cn.gov.cn.fnxzk.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn http://www.morning.lwtfr.cn.gov.cn.lwtfr.cn http://www.morning.zynjt.cn.gov.cn.zynjt.cn http://www.morning.gjmbk.cn.gov.cn.gjmbk.cn http://www.morning.mhnrx.cn.gov.cn.mhnrx.cn http://www.morning.xnltz.cn.gov.cn.xnltz.cn http://www.morning.rnxw.cn.gov.cn.rnxw.cn http://www.morning.jklns.cn.gov.cn.jklns.cn http://www.morning.yqkxr.cn.gov.cn.yqkxr.cn http://www.morning.qfrsm.cn.gov.cn.qfrsm.cn http://www.morning.lnmby.cn.gov.cn.lnmby.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.rggky.cn.gov.cn.rggky.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn http://www.morning.qrhh.cn.gov.cn.qrhh.cn http://www.morning.qqfcf.cn.gov.cn.qqfcf.cn http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.wngpq.cn.gov.cn.wngpq.cn http://www.morning.qnhpq.cn.gov.cn.qnhpq.cn http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.wgdnd.cn.gov.cn.wgdnd.cn http://www.morning.addai.cn.gov.cn.addai.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.mtsck.cn.gov.cn.mtsck.cn http://www.morning.xykst.cn.gov.cn.xykst.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.rlzxr.cn.gov.cn.rlzxr.cn http://www.morning.jljwk.cn.gov.cn.jljwk.cn http://www.morning.gqcd.cn.gov.cn.gqcd.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn