博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx Rewrite正则表达式案例
阅读量:6843 次
发布时间:2019-06-26

本文共 3401 字,大约阅读时间需要 11 分钟。

前两天简单整理了下Nginx的URL Rewrite基本指令,今天谈谈Nginx Rewrite的location正则表达式。

1.Nginx Rewrite 基本标记(flags)

last 相当于Apache里的[L]标记,表示完成rewrite

break 本条规则匹配完成之后,终止匹配,不再匹配后面的规则。

redirect 返回302临时重定向 地址栏会显示跳转后的地址

permanent 返回301永久重定向 地址栏会显示跳转后的地址

2、正则表达式:

 1)变量名,错误的值包括:空字符串“”,或者任何以0开始的字符串。

(2)变量比较可以使用“=”和“!=”(等于和不等于)运算符

(3)正则表达式模式匹配可以使用“~”和“~*”符号

(4)~  为区分大小写匹配 

(5)~* 为不区分大小写匹配 

文件以及目录匹配:

(6)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

(7)-f和!-f用来判断是否存在文件 

(8)-d和!-d用来判断是否存在目录 

(9)-e和!-e用来判断是否存在文件或目录 

(10)-x和!-x用来判断文件是否可执行:

3、案例:

3.1)需要将网站以https形式访问

server {  

    listen   80;  

    server_name ;  

    rewrite ^(.*)$  https://$host$1 permanent;  

}  

小提示:百度是通过index.html刷新网页,更巧妙一些。

  
  

 3.2)Nginx Redirect将所有xxx.com与abc.xxx.com域名全部自跳

server {listen 80;server_name xxx.com abc.xxx.com;index index.html index.php;root /var/InfiNET/web/;if ($http_host !~ "^www\.xxx\.com$") {rewrite ^(.*) [url]http://www.xxx.com$1 redirect;}........................}

3.3)如果虚拟站点只允许https访问时,用http访问时nginx会报出497错误码,用户习惯用http访问,后面通过497状态码让它自动跳到443端口  

server {      listen      x.x.x.x:443;  #ssl端口      listen      x.x.x.x:80;       server_name  xxx.com;      ssl                  on;      #指定PEM格式的证书文件       ssl_certificate      /xxx/xxx.pem;       #指定PEM格式的私钥文件      ssl_certificate_key  /xx/xxx.key;            #让http请求重定向到https请求       error_page 497  https://$host$uri?$args;  }

3.4)location匹配查询资源

eg:

示例 1:

location = / {# matches the query / only.# 只匹配 / 查询。}

匹配任何查询,因为所有请求都已 /  开头。但是正则表达式规则和长的块规则将被优先和查询匹配

示例 2:

location ^~ /images/ {# matches any query beginning with /images/ and halts searching,# so regular expressions will not be checked.# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。

示例 3:

location ~* \.(gif|jpg|jpeg)$ {# matches any request ending in gif, jpg, or jpeg. However, all# requests to the /images/ directory will be handled by}

3.4.1) 匹配任何已 gif、jpg 或 jpeg 结尾的请求。

location ~ .(jsp|jspx|do)?$ {   proxy_set_header Host $host;proxy_pass http://127.0.0.1:8080;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;client_max_body_size 10m; client_body_buffer_size 128k;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}
3.4.2)
匹配.php代理到后端
location ~ .*.PHP?$ {        fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        include        fcgi.conf;    }

3.5) Nginx exprires 缓存

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {expires      30d; } location ~ .*\.(js|css)?$ {expires      12h;}}# 根据文件类型location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {if (-f $request_filename) {root /html/web/bbs;expires 1d;break;}}#根据目录类型location ~ ^/(images|javascript|js|css|flash|media|static)/ {root /html/web;expires 30d;}

3.6)nginx防盗链

#Preventing hot linking of images and other file typeslocation ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {valid_referers none blocked server_names *.chinarenservice.com http://localhost baidu.com;if ($invalid_referer) {rewrite ^/ [img]http://www.xxx.com/images/default/logo.gif[/img];# return 403;}}

3.7)Nginx禁止访问下载某类型的文件

3.7.1)Nginx 下禁止访问*.txt 文件,配置方法如下.代码:

location ~* \.(txt|doc)$ {if (-f $request_filename) {root /html/test;break;}}

3.7.2)禁止访问某个目录

location ~ ^/(tomcat)/ {deny all;}

3.7.3)禁止下载以点开头的文件:如 .freeke;.dat;.exe

location ~ /\..+ {deny all;}

转载地址:http://ojbul.baihongyu.com/

你可能感兴趣的文章
jquery中ajax回调函数使用this
查看>>
我记录网站综合系统 -- 技术原理解析[7:CSS类]
查看>>
14. Longest Common Prefix
查看>>
Mac OS Sierra 安装PHP扩展 Operation not permitted
查看>>
集训考试题tents
查看>>
设计模式的学习
查看>>
小心指针被delete两次
查看>>
稳压管稳压电路
查看>>
android手机推送消息 (百度云推送)
查看>>
Django的认证系统 -- auth模块
查看>>
容斥原理
查看>>
解析三层架构(2)----分层究竟分出了那些东西
查看>>
超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
查看>>
Basic Tutorials of Redis(2) - String
查看>>
服务器CSRF攻击的应对之道
查看>>
JS实现页面刷新方法
查看>>
tars环境部署
查看>>
WF 图片下载
查看>>
滤镜弹出窗
查看>>
回到基础:封装集合
查看>>