Nginx重写规则
Nginx的重写规则,依赖于pcre库(perl compatible regular expression)。所以在安装的时候一定要让nginx支持这个功能,以及安装pcre-devel,prce.
nginx rewrite 正则表达式匹配
大小写匹配
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为 区分大小写但不匹配 及 不区分大小写但不匹配
^~ URI 不使用正则匹配,可用使用元字符匹配
文件及目录匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
flag标记
last本次重写完成之后,重启下一轮检查 a[test]->a[test] ,注意如果重写规则的uri中和本段的location中uri有重复,则注意避免死循环,死循环10次后会返回500错误。
break 终止匹配, 不再匹配本段的内容。a[test]->b[test] completed!
redirect 返回302临时重定向 地址栏会显示跳转后的地址。
permanent 返回301永久重定向 地址栏会显示跳转后的地址。
break和last区别举例:
####
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403; #本段中location中匹配的内容和重写规则中没有重复的
...
}
But if these directives are put inside the "/download/" location, the last flag should be replaced by break, or otherwise nginx will make 10 cycles and return the 500 error:
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
#####
if指定的使用:格式和c语言相同,
if (condition){
rewrite …
}
注意这里的if不支持嵌套,也不支持&& 和 ||逻辑判断
set 使用:set var $avg
rewrite_log:默认off,如果为on话,会以notic级别记录到error.log
一些例子:
- http转https:rewrite ^(.*) https://www.wxl.com$1 permanent;
- 域名跳转,将bbsX.wxl.com 转到http://www.baidu.com
location / {
root html;
index index.html index.htm;
if ($host ~ '^bbs\d{1}\.wxl\.com'){
rewrite ^(.*) http://www.baidu.com$1 permanent;
}
}
3.文件读写分离:文件上传的WebDav,基于http1.1协议,扩展了http1.1,在GET,POST,HEAD的其他功能,在我们作实验的时候,可以使用Apache打开Dav On
location / {
proxy_pass http://read_upstream;
if ($request_method = "PUT"){
proxy_pass http://write_upsteam;
}
}
4. 目录自动添加/,这个功能一般浏览器自动完成.如果使用index.html在二级目录下,比如/data/bbs/index.html,如果输入/data/bbs浏览器不会跳转到主页面index.html
location ^~ /bbs {
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
}
如果uri中有很多目录的话,将不利于搜索引擎的搜索,通过重写规则可以让uri目录看起来很少。
rewrite ^/server-([0-9]+)/ -([0-9]+)/ -([0-9]+)/ -([0-9]+)/\.html$ /server/$1/$2/$3/$4.html last;
break;
这样地址栏输入http://www.wxl-dede.com/server-12-12-12-12.html,
实际访问的是http://www.wxl-dede.com/server/12/12/12/12.html
location ~ ^/(cron|templates)/ {
deny all; break;
}
if ($http_user_agent ~ Chrome){
rewrite ^(.*)$ /data/index.html break;
}
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
Nginx防盗链
盗链的概念,自己网站不存在的资源,链接到其他网站的资源。但对其他网站会造成额外的消耗,unfair。
在http的请求头部中refrer头域中的值记录访问目标的源地址,因此在nginx中可以通过制定合法的URL,来防止防盗链。
语法: valid_referers none | blocked | server_names | string …;
none 来源头部为空的情况
blocked 防火墙删除了http://或者 https://
server_names 制定特定的主机,支持匹配符,支持正则
例子:基于资源的防盗链
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *.wxl.com;
if ($invalid_referer) {
return 403;
rewrite ^/ http://img.jjonline.cn/forbid.gif;
break;
}
对jpg,jpeg等资源进行防止盗链。
当然也可以基于目录
root /server/file/;
valid_referers none blocked *.wxl.com;
if ($invalid_referer) {
return 403;
rewrite ^/ http://img.jjonline.cn/forbid.gif;
break;
}
Nginx重写规则的更多相关文章
- Nginx重写规则指南 转
http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ Nginx重写规则指南 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你, ...
- 基础知识之nginx重写规则
nginx重写规则 nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f ...
- Nginx 重写规则指南1
作者:运维生存时间 - 默北 链接:www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你,你 ...
- Nginx 重写规则指南
作者:运维生存时间 - 默北 链接:www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你,你 ...
- nginx重写规则报nginx: [emerg] directive "rewrite" is not terminated by ";"
对于下面的重写规则 rewrite ^/gongying/([\d]{8})_([\d]+).html$ /index.php?app=support&act=view&pts=$1& ...
- Laravel的Nginx重写规则完整代码
laravel基本重写规则 location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$qu ...
- nginx重写规则配置
https://segmentfault.com/a/1190000002797606 location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符 ...
- thinkphp5.0配置nginx重写规则
我的centeros7.3系统,单主机实例: vi /usr/local/nginx/conf/nginx.conf 在如图红框位置加入以下代码(图片是截取的,截取部分上方还有其他的默认配置代码,代码 ...
- Nginx笔记总结十一:Nginx重写规则指南
依赖PCRE库,需要安装pcre,最多循环10次,超过后返回500错误, 1. rewrite模块指令 break:完成当前设置的重写规则,停止执行其他的重写规则 if: if () { ...
随机推荐
- java和jar命令
IDEA打可运行jar http://bglmmz.iteye.com/blog/2058785 -jar参数运行应用时classpath的设置方法 你是否在使用java -jar参数运行打包好的ja ...
- redis05----Redis 中的事务
Redis支持简单的事务 Redis与 mysql事务的对比 Mysql Redis 开启 start transaction multi 语句 普通sql 普通命令 失败 rollback 回滚 d ...
- (MySQL里的数据)通过Sqoop Import Hive 里 和 通过Sqoop Export Hive 里的数据到(MySQL)
Sqoop 可以与Hive系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HIVE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sqoo ...
- amazon lightsail
https://51.ruyo.net/6038.html https://aws.amazon.com/cn/lightsail/
- vue-router-h5-history
vue-router的HTML5 History 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面. const router = new V ...
- p1199八数码问题
oj上简化的八数码问题,最强的数据仅仅是20步: 根据曼哈顿距离构造启发函数: 主算法:IDA*:(使用方法好像不太对......) 未用位运算优化: #include<iostream> ...
- hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]
我自己写的第一个 Silverlight 2.0 程序 [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)] 程序运行时:小地球将绕着圆形轨迹做圆周运动. ...
- Android自动化测试环境搭建
Android自动化环境的搭建主要包括: 1. java jdk和jre的安装和环境的配置 2. appium服务器的安装和配置 3. eclipse开发工具,这里不必要用Android Studio ...
- 【系列】 2-SAT
bzoj 1997 Planar 题目大意: 给一个存在曼哈顿回路的无向图,求该图是否为平面图 思路: 先把曼哈顿回路提出来,则剩下的边的两个端点若有$ABAB$的形式则这两条边必定一个在环外一个在环 ...