分享

Nginx基础——Rewrite规则

 xkl135 2018-08-02

技术文章第一时间送达!

源码精品专栏

 

Rewrite规则学习记录

rewrite是nginx一个特别重要的指令,该指令可以使用正则表达式改写URI。可以指定一个或多个rewrite指令,按顺序匹配。

正则匹配规则

1~  区分大小写匹配
2~* 不区分大小写匹配
3!~ 和 !~* 区分大小写不匹配及不区分大小写不匹配

文件及目录匹配

1-f和!-f 判断是否存在文件
2-d和!-d 判断是否存在目录
3-e和!-e 判断是否存在文件或目录
4-x和!-x 判断文件是否可执行

rewrite基本语法

1set
2if
3return
4break
5rewrite

break指令

1使用范围:server,location,if;
2中断当前相同作用域的其他nginx配置。

if指令

1使用范围:server,location
2检查一个条件是否符合。If指令不支持嵌套,不支持多个条件&&和||处理。

return指令

1格式:return code ;
2使用范围:server,location,if;
3结束规则的执行并返回状态码给客户端。

set指令

1使用环境:server,location,if
2定义一个变量,并给变量赋值。变量的值可以为文本、变量或者变量的组合。
3set $var 'hello world'

rewrite指令格式

1rewrite regex replacement [flag]
2
3flag标志位有四种:
4break:停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果。 
5last:停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果。
6redirect:返回302临时重定向,一般用于重定向到完整的URL(包含http:部分) 
7permanent:返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)

应用实例(摘自网络)

当访问的文件和目录不存在时,重定向到某个php文件

1if( !-e $request_filename )
2{
3    rewrite ^/(.*)$ index.php last;
4}

目录对换 /123456/xxxx ====> /xxxx?id=123456

1rewrite ^/(\d )/(. )/  /$2?id=$1 last;

如果客户端使用的是IE浏览器,则重定向到/ie目录下

1if$http_user_agent ~ MSIE)
2{
3    rewrite ^(.*)$ /ie/$1 break;
4}
1

禁止访问以/data开头的文件

1location ~ ^/data
2{
3    deny all;
4}

禁止访问以.sh,.flv,.mp3为文件后缀名的文件

1location ~ .*\.(sh|flv|mp3)$
2{
3    return 403;
4}

设置某些类型文件的浏览器缓存时间

1location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
2{
3    expires 30d;
4}

文件反盗链并设置过期时间

 1location ~*^. \.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ 
2{
3    valid_referers none blocked *.*. localhost 208.97.167.194;
4    if ($invalid_referer) {
5        rewrite ^/ http://img./leech.gif;
6        return 412;
7        break;
8    }
9    access_log  off;
10    root /opt/lampp/htdocs/web;
11    expires 3d;
12    break;
13}

将多级目录下的文件转成一个文件,增强seo效果

1/job-123-456-789.html 指向/job/123/456/789.html
2
3rewrite^/job-([0-9] )-([0-9] )-([0-9] )\.html$ /job/$1/$2/jobshow_$3.html last;

域名跳转

1server
2{
3    listen 80;
4    server_name jump.;
5    index index.html index.htm index.php;
6    root /opt/lampp/htdocs/www;
7    rewrite ^/ http://www./;
8    access_log off;
9}

多域名转向

1server_name www.www.;
2index index.html index.htm index.php;
3root  /opt/lampp/htdocs;
4if ($host ~ 'linuxidc\.net') {
5    rewrite ^(.*) http://www.$1permanent;
6}

附录 —— nginx全局变量

 1arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
2args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
3binary_remote_addr #二进制的客户地址。
4body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
5content_length #请求头中的Content-length字段。
6content_type #请求头中的Content-Type字段。
7cookie_COOKIE #cookie COOKIE变量的值
8document_root #当前请求在root指令中指定的值。
9document_uri #与uri相同。
10host #请求主机头字段,否则为服务器名称。
11hostname #Set to themachine’s hostname as returned by gethostname
12http_HEADER
13is_args #如果有args参数,这个变量等于”?”,否则等于”',空值。
14http_user_agent #客户端agent信息
15http_cookie #客户端cookie信息
16limit_rate #这个变量可以限制连接速率。
17query_string #与args相同。
18request_body_file #客户端请求主体信息的临时文件名。
19request_method #客户端请求的动作,通常为GET或POST。
20remote_addr #客户端的IP地址。
21remote_port #客户端的端口。
22remote_user #已经经过Auth Basic Module验证的用户名。
23request_completion #如果请求结束,设置为OK。 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
24request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
25request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
26scheme #HTTP方法(如http,https)。
27server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
28server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
29server_name #服务器名称。
30server_port #请求到达服务器的端口号。





如果你对 Dubbo 感兴趣,欢迎加入我的知识星球一起交流。


知识星球



目前在知识星球(https://t./2VbiaEu)更新了如下 Dubbo 源码解析如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

...
一共 60 篇

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多