Nginx(3)
ngx_http_rewrite_module模块:
The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions, return redirects, and conditionally select configurations.
将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
1、rewrite regex replacement [flag]
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;
注意:如果在同一级配置块中存在多个rewrite规则,那么会自上而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,如果再次检查符合某条规则,还会进行替换。因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
如果replacement是以http://或https://开头,则替换结果会直接以重定向返回给客户端;
301:永久重定向;
[flag]:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环; 类似于循环中的continue,
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;类似于循环中的break,跳出整个循环
例如:rewrite ^/forum/(.*)$ /admin/$1 break; 后面添加就可以
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;和redirect一样,只是状态码变成了301永久重定向
下面是一个示例
[root@localhost /usr/local/nginx/conf/conf.d]#cat 80.conf server { listen 80 default_server; root /data/web; location / { index index.html index.htm; } error_page 403 404 /404.html; location = /404.html { root /data/web/error; } } 在web目录创建一个forum目录 [root@localhost /data/web]#cd forum/ [root@localhost /data/web/forum]#cat index.html <h1>/data/web/forum/index.html</h1>
下面是正常的访问
假如网站以前的路径是bbs,但是后来将路径更换为了forum,但是用户还是习惯使用bbs路径来访问,当bbs目录不存在的时候,会报错
这里可以利用rewrite模块来进行重写
[root@localhost /usr/local/nginx/conf/conf.d]#cat 80.conf server { listen 80 default_server; root /data/web; location / { rewrite ^/bbs/(.*)$ /forum/$1; index index.html index.htm; } error_page 403 404 /404.html; location = /404.html { root /data/web/error; } }
当访问:http://192.168.175.11/bbs 的时候,实际是访问的forum目录,但是url显示的仍然是bbs路径。
这里有一个假设不知道对不对
这是一个博客地址:http://blog.oldboyedu.com/pptp-l2tp/ 域名对应的IP为:101.200.195.98:80
这是博客地址里面的图片:http://cdn.oldboyedu.com/wp-content/uploads/2016/09/092616_0318_ITProc1.png
得到域名cdn.oldboyedu.com的远程ip为:Remote Address:124.193.230.158:80,为某一家cdn的地址
按理说一个博客是没有钱自建cdn的,但是怎么做到:使用他人的cdn,但是显示的是自己的域名,怎么达到这种效果呢
在nginx的配置里面写入:rewrite cdn.oldboyedu.com/(.*) 某个cdn图片的真实的url/$1
这样做的好处:当更换了cdn的厂家的时候,只需要更改rewrite后面的url,
当请求(http://cdn.oldboyedu.com/wp-content/uploads/2016/09/092616_0318_ITProc1.png)这个图片的时候,其实是去某个cdn那里取得了图片,但是url仍然显示的是cdn.oldboyedu.com,,,,,显示的好像是自己的cdn一样,好专业
在博客的后台可以添加图片的url,这里填入:cdn.oldboyedu.com,这样上传的图片的url路径都会是以这个域名开头的路径,并保存在数据库中,这个图片的文件路径url就永远不变了。
如果有cdn的话应该会将这个图片目录同步到cdn的云存储中,
不知道对不对,还要请教别人
redirect测试
[root@localhost /usr/local/nginx/conf/conf.d]#cat 80.conf server { listen 80 default_server; root /data/web; location / { rewrite ^/bbs/(.*)$ /forum/$1 redirect; index index.html index.htm; } error_page 403 404 /404.html; location = /404.html { root /data/web/error; } } 当在浏览器中输入: 并将这个url返回给客户端,状态码302临时重定向,由客户端重新发起请求:http://192.168.175.11/forum,最后显示出来
这里在浏览器里显示的url是重定向后的真实的url,
也可以转向其他网站:rewrite ^/bbs/(.*)$ https://www.baidu.com redirect; 那么访问bbs网页的时候会跳转到某度上面
2、return
return code [text];
return code URL;
return URL;
Stops processing and returns the specified code to a client.
3、 rewrite_log on | off;
是否开启重写日志;
4、 if (condition) { … }
引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;
condition:
比较操作符:
==
!=
~:模式匹配,区分字符大小写;
~*:模式匹配,不区分字符大小写;
!~:模式不匹配,区分字符大小写;
!~*:模式不匹配,不区分字符大小写;
文件及目录存在性判断:
-e, !-e
-f, !-f
-d, !-d
-x, !-x
5、set $variable value;
用户自定义变量 ;
ngx_http_gzip_module:
The ngx_http_gzip_module module is a filter that compresses responses using the “gzip” method. This often helps to reduce the size of transmitted data by half or even more.
1、gzip on | off;
Enables or disables gzipping of responses.
2、gzip_comp_level level;
Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
3、 gzip_disable regex …; #在请求报文中会有:User-Agent首部,只要包含关键字就可以生效
Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.对哪个浏览器关闭压缩功能
4、 gzip_min_length length;
启用压缩功能的响应报文大小阈值;文件小于多大的时候就不压缩了。比如只有20字节,压缩没有意义
5、gzip_buffers number size;
支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;
6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
off:对代理的请求不启用
no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
7、gzip_types mime-type …;#在/etc/nginx/mime.types 指明可以压缩的格式类型
压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
–
–
–
评论前必须登录!
注册