前两天简单整理了下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 www.xxx.com;

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

}

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

1
2
3
<html>  
<meta http-equiv="refresh" content="0;url=https://baidu.com/">  
</html>

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

1
2
3
4
5
6
7
8
9
10
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端口

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

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

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

示例 2:

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

示例 3:

1
2
3
4
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 结尾的请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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代理到后端
1
2
3
4
5
location ~ .*.PHP?$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fcgi.conf;
    }

3.5) Nginx exprires 缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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防盗链

1
2
3
4
5
6
7
8
#Preventing hot linking of images and other file types
location ~* ^.+\.(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 文件,配置方法如下.代码:

1
2
3
4
5
6
location ~* \.(txt|doc)$ {
if (-f $request_filename) {
root /html/test;
break;
}
}

3.7.2)禁止访问某个目录

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

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

1
2
3
location ~ /\..+ {
deny all;
}

本文出自 “永不放弃!任志远” 博客,请务必保留此出处http://renzhiyuan.blog.51cto.com/10433137/1898091

Nginx Rewrite正则表达式案例的更多相关文章

  1. Nginx的Rewrite正则表达式,匹配非某单词

    Nginx的Rewrite正则表达式,匹配非某单词 由于要rewrite一个地址从 /mag/xx/xxx/ -> /m/xxx 但原先 /mag/xx/more/ 要保留 这就得写一个比较奇特 ...

  2. Nginx的正则表达式

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Ра ...

  3. Nginx Rewrite相关功能

    目录 Nginx Rewrite相关功能 ngx_http_rewrite_module模块指令: if指令: set指令: break指令: return指令: rewrite_log指令: rew ...

  4. nginx——rewrite模块

    1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...

  5. Nginx Rewrite规则初探(转)

    Nginx  rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Ng ...

  6. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  7. nginx rewrite 实现URL跳转

    最近工作中常常要改nginx配置,学习了nginx中rewrite的用法 URL跳转这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上.常见的应用场景是让多个域名跳转到同一个URL上 ...

  8. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  9. nginx rewrite 指令

    ginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else. 该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方 ...

随机推荐

  1. Web安全学习规划

    一名合格的Web安全工程师是要具备很多的知识点,不但要对网站架构熟悉,通讯协议,测试流程与测试工具使用,漏洞利用脚本编写,还有需要经验的积累等. 互联网进入下半场,竞争越发的激烈,能与人工智能比肩的热 ...

  2. linux kernel内存映射实例分析

    作者:JHJ(jianghuijun211@gmail.com)日期:2012/08/24 欢迎转载,请注明出处 引子 现在android智能手机市场异常火热,硬件升级非常迅猛,arm cortex ...

  3. [SSH] Intro to SSH command

    Create an ssh key: ssh-keygen Copy an SSH key to a remoate server: ssh-copy-id root@104.197.227.8 // ...

  4. IntelliJ idea配置python

    为什么选择Intellij?因为我需要系统地管理python工程,Intellij可断点调试. 1.下载IntelliJ idea 在百度中搜索“IntelliJ idea”,并点击官网地址进行下载: ...

  5. 我不是学Java的!我不是学Java的!我不是学Java的!。。。。【自我催眠中】

    我不是学Java的!我不是学Java的!我不是学Java的!....[自我催眠中]

  6. Discuz常见小问题-_如何修改网站LOGO

    1 界面-风格管理,点击编辑 2 默认的LOGO图片叫做logo.png,存放在X:\PHPNow\htdocs\Discuz\upload\static\image\common文件夹下面,其中X是 ...

  7. SuperMap开发入门4——保存的坑

    工作空间.地图等的打开.保存.删除是最基本的操作,可我居然卡在保存工作空间的问题上了. 功能需求 需求很简单:打开工作空间中的某一地图,缩放一下,保存地图.(下次打开时,已经缩放到上次修改过的地方) ...

  8. 【转】application.properties 常见配置

    Various properties can be specified inside your application.properties/application.yml file or as co ...

  9. 基于FPGA的超声波测距(一)

    硬件平台:CycloneII EP2C5Q208C8+DYP-ME007 1:超声波原理 DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图1为DYP-ME007外观, ...

  10. typescript - 前言介绍

    众所周知,JavaScript是弱语言(子承父业都表达不了),因此比较大的企业考虑到可维护性以及安全性来说,都不用它开发,因此Typescript诞生了,它并不是为了替换JavaScript而诞生的, ...