rewrite模块名:ngx_http_rewrite_module默认自动被编译
指令:rewrite regex replacement [flag]
regex :正则表达式,用于匹配用户请求的uri
replacement:重写后的结果
flag:
last:重写完成之后停止对当前uri的进一步处理,改为对新uri的新一轮处理,在nginx内部完成,客户端不会察觉
break:重写完成后,停止对当前uri的处理,转向其后面的其他配置
补充:last 重写之后还会在nginx内部重新自上而下检查规则,break则不会重新检查规则
redirect:重写完成之后会返回给客户端一个临时重定向,由客户端对新的uri发起请求(302)
permanent:重写完成后会返回给客户端一个永久重定向,由客户端对新的uri发起请求(301)
应用上下文:http,server,location,if
实例:
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last
...
}
.*表示任意内容,\.表示对.进行转义 $1对前面的第一个()中的内容引用以此类推
http://ww.c.com/download/a/media/12.wmv--->/download/a/mp3/12.mp3
如果flag没有指定,则默认为last
PCRE正则表达式元字符
字符匹配 . [] [^]
次数匹配 * + ? {m} {m,} {m,n}
位置定位 ^,$
或者 |
分组 () 后向引用 $1 $2…
rewrite_log on|off 是否将重写日志记入error log中,默认为关闭
images/loading.gif' data-original="http://images2015.cnblogs.com/blog/930249/201604/930249-20160421153138710-82166387.png" />
www.c.com/bbs/index.html---> /tmp/vhost2/forum/index.html
上面的if语句的作用:www.c.com/download ---> www.c.com/index.html return表示把新的uri发送给客户端,由客户端重新请求
http://www.c.com/hello/ ---> https://www.baidu.com
模块ngx_http_gzip_static_module是nginx会读取预先gzip压缩好的文件,静态压缩只需压缩一次,不需要每次请求都压缩,此模块编译时需要使用--with-http_gzip_static_module参数才会被编译,模块ngx_http_gzip_module不需指定默认会被编译
gzip on 开启动态压缩功能 gzip_min_length 触发压缩功能的响应报文的最小长度 单位为字节 gzip_http_version 触发压缩功能的http协议最小版本 gzip_disable msie6 对IE6的浏览器发送响应报文时不进行压缩 gzip_types 对哪些类型的资源做压缩
反向代理模块ngx_http_proxy_module 默认会被编译
proxy_pass URL
应用上下文:location,location内部的if中,limit_except
反代www.d.com--->http://192.168.238.150
上面三个图都是反代www.d.com/admin --> http://192.168.238.150/admin/ 因此如果http://192.168.238.150/ 则最后的/会被location后定义的参数覆盖,如果http://192.168.238.150则location后定义的参数会被添加到http://192.168.238.150后面,
反代www.d.com/admin ---> http://192.168.238.150/hello 如果location中最后有/则hello最后也要有/否则会报错
如果location后面跟了正则表达式或者location上下文使用了rewrite则proxy_pass 后的url 必须是http://192.168.238.150这种形式,后面不能带uri,哪怕只有/也不可以
接下来了解一个参数proxy_set_header field value,用于proxy_server向backend server 发送请求报文时,将某请求首部重新赋值,或在原有值后面添加一个新值,比如proxy_set_header Host value Host是请求报文请求首部的Host,这里的value有两个值要介绍一下,$proxy_host 假如proxy_pass http://www.a.com 那$proxy_host指的就是www.a.com, $http_host 这个是客户端请求报文请求首部Host的值
上面的设置,当代理服务器向后端请求时,会将请求报文的请求首部Host设置为客户端请求报文的请求首部Host的值
add_header这个参数是当代理服务器返回给客户端是在响应首部添加Via这个首部并赋值为$server_addr $server_addr是nginx的内置变量其值为代理服务器自己的ip地址
反向代理缓存能把静态页面和动态页面的请求都缓存下来,proxy_cache_path 只能存放于http上下文中,不能放置于server或location
proxy_cache_path 指定缓存目录,prxoy的上一级目录必须存在否则会报错, levels指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母,keys_zone=pcache 参数用来为这个缓存区起名(proxy_cache 指令需要用到 其后对应缓存区名称)后面的10m指内存缓存空间大小为10MB, inactive=3h 指如果缓存数据在3小时(天:d、秒:s、分:m)内没有被访问,将自动被删除 max_size=10g 指硬盘缓存大小为10GB
proxy_cache调用缓存区后跟值off表示禁用 proxy_cache_key $request_uri 以$request_uri的值为缓存键值,这样做即使有多个主机名也一样能缓存命中了 ,这个参数可以省略不用指
请求
http://www.ooxx.com/book/1232.html
$request_uri获取的只是/book/1232.html
proxy_cache_valid指令,可以在http、server、location中使用,如果proxy_cache_valid 不指定状态码,直接指定缓存时间,将只缓存默认的状态码(200、301、302),而如果需要对304也指定,则需要写完整的状态码,如上面写的200 304
原标题:nginx的rewrite,gzip,反向代理,
关键词:ip