1:指定rewrite规则
rewrite regex replacement [flag];
 
什么是rewrite规则:If the specified regular expression matches a request URI, URI is changed as specified in the replacement string. The rewrite directives are executed sequentially in order of their appearance in the configuration file. It is possible to terminate further processing of the directives using flags. If a replacement string starts with “http://”, “https://”, or “$scheme”, the processing stops and the redirect is returned to a client.
 
欢哥人工翻译(可以打赏哦!!!):如果regex匹配到用户访问的URI,那么用户访问的URI就会被替换为replacement所指定的string。这个replacement所指定的string会继续向后执行,但是执行到哪里结束会给flags这个参数所决定。如果这个replacement是“http://”, “https://”, 或者是“$scheme”开头的话,那么rewrite将不会向后执行,会直接终止并返回给客户端
 
rewrite的工作法则:
1:rewrite实现重写操作,匹配URI可以使用正则表达式匹配,替换可以使用正则表达式的后向引用
2:如果在location中存在多个rewrite规则会自上而下逐个被匹配检查,可以使用flag参数控制
3:如果replacement string是以“http://”, “https://”, 或者是“$scheme”开头的话,则替换结果会直接以重定向方式返回给用户
 
flag参数详解:
1:last:表示结束本轮rewrite规则从上之下进行检查,而是从最开始从新循环检查,且请求结果不会返回给客户端(状态码为:200)
2:break:重写完成后不会对将前URI进行后续的匹配检查,直接将URI请求的资源返回给客户端(状态码为:200)
3:redirect:重定向完成后以临时重定向的方式直接返回新的URL给客户端,客户端再对新的URL发起请求(状态码为:302)
4:permanent:重定向成后以永久重定向的方式直接返回新的URL给客户端,客户端在对新的URL发起请求(状态码为:301)
 
避免死循环匹配:(加一个break)
location / {
root /app;
index index.html index.htm;
rewrite (.*)\.htm$ $1.html break;
}
 
location ~* \.html$ {
root /app;
index index.html index.htm;
rewrite (.*)\.html$ $1.htm break;
}
 
 
2:指定rewrite是否记录到日志,如果启用,这些rewrite日志会记录到错误日志中
rewrite_log on | off;
 
3:设置条件判断,如果条件满足,执行指定的指令
判断表达式:
==:精确等于
!=:不等于
~:模式匹配,区分字母大小写
~*:模式匹配,不区分字母大小写
!~:模式不匹配,区分字母大小写
!~*:模式不匹配,不区分字母大小写
 
检查file或directory的属性:
-f, !-f:如果文件存在
-d, !-d: 如果目录存在
-e, !-e:如果文件或目录或链接存在
-x , !-x:如果文件可执行
 
例如:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
 
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
 
if ($request_method = POST) {
return 405;
}
 
if ($slow) {
limit_rate 10k;
}
 
if ($invalid_referer) {
return 403;
}
 
4:自定义变量
set $variable value
 
例如:
set $hello "ni hao"
 
5:指定返回的状态码或URL,停止处理URI匹配过程
return code
 
例如:
if ($invalid_referer) {
return 403 "<p> wrong page </p>"
}
  • ngx_http_gzip_module(压缩)
功用:用户压缩文本资源
 
1:启用gzip压缩功能
gzip on | off;
 
2:指定压缩比例,1-9,默认为1
gzip_comp_level level;
 
3:开启压缩功能的最小的长度
gzip_min_length length;
 
4:设定协议的最小版本以上都可以压缩
gzip_http_version 1.0 | 1.1;
 
5:设定压缩的资源内容类型,默认为text/html
gzip_types mime-type …;
 
 
6:如果Nginx是方向代理如果进行压缩
gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
 
例如:
gzip on
gzip_http_version 1.1
gzip_disable msle6
gzip_min_lengh 1000
gzip_types text/plain text/css text/js application/xml
gzip_proxied expired no-cache no-store private auth;
  • ngx_http_fastcgi_module(fastcgi功能)
对于LAMP来说:实现fastcgi协议的模块为proxy_fastcgi_module,
对于LNMP来说:实现fastcgi协议的模块为ngx_http_fastcgi_module,
 
fastcgi模块的指令说明:
 
 
1:在Nginx中指定php-fpm服务器监听的地址和端口
fastcgi_pass address;
例如:fastcgi_pass 127.0.0.1:9000;
 
2:定义fastcgi应用的主页名称
fastcgi_index name;
例如:fastcgi_index index.php;
 
3:传递给php-fpm服务器参数及其值
fastcgi_param parameter value [if_not_empty];
例如:fastcgi_param SCRIPT_FILENAME /apps/php/$fastcgi_script_name;
需要导入fastcgi_param参数文件,用include fastcgi_params; 这个 fastcgi_param文件里面有各种的变量,其中就有$fastcgi_script_name。
 
 
4:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
 
path:指明缓存文件系统路径,用于缓存文件数据,在这个路径下会有n级结构,实现对文件数据的快速查找,使用的hash算法
 
max_size=size:此路径下指定多大的空间用于缓存数据
 
levels=#:指定缓存目录的层级结构
例如:levels=1:2 表示:一级目录的名称为1个字符,二级目录的名称为2个字符
 
keys_zone=name:size:指定磁盘上用于存储value的存储空间名称、大小
 
inactive=time:指定非活动时间
 
max_size=size:指定存储的空间大小
 
注意:这个只能用于http上下文(/var/cache/nginx_fastcgi目录需要先创建好)
例如:在http的上下文中指定:fastcgi_cache_path /var/cache/nginx_fastcgi levels=1:2:3 keys_zone=fcgi_cache:10m inactive=3h;
在一个fastcgi的location中调用这个fastcgi_cache存储空间名
例如:
location ~ \.php$ {
fastcgi_cache fcgi_cache;
}
 
 
5:是否启用cache功能,如何启用,数据缓存在哪个cache中
fastcgi_cache zone | off;
例如:在使用fastcgi的location中添加:fastcgi_cache fcgicache; 指明调用的缓存的名字
 
6:指明在缓存中使用什么作为k/v键值对中的key
fastcgi_cache_key string;
例如:在使用fastcgi的location中添加:fastcgi_cache_key $request_uri; 指明以用户请求的uri为key
 
 
7:指明缓存哪些请求方法的数据
fastcgi_cache_methods GET | HEAD | POST …;
例如:fastcgi_cache_methods GET
 
8:指定请求匹配的最小次数,大于最小次数才会缓存
fastcgi_cache_min_uses number;
例如:fastcgi_cache_min_uses 5;
 
9:指明对应的响应码缓存的时间,没有定义是不会缓存的
fastcgi_cache_valid [code …] time;
例如:
fastcgi_cache_valid 200 30s;
fastcgi_cache_valid 301 302 1m;
fastcgi_cache_valid any 10s;
 
注意:用使用缓存机制,需要在location中指定如下三个指令
fastcgi_cache
fastcgi_cache_key
fastcgi_cache_valid
 
 
 
 
在Nginx中使用ngx_http_fastcgi_module示例
location ~ \.php$ {
# 将客户端请求的URI从$fastcgi_script_name变量中取出来,且通过fastcgi发送给php服务器,fastcgi://192.168.23.201:9000/apps/php/$fastcgi_script_name。那么PHP服务器就会在本地的文件系统去找/apps/php/$fastcgi_script_name资源。
fastcgi_pass 192.168.23.201:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /apps/php/$fastcgi_script_name;
include fastcgi_params;
# 指明缓存的键,这里存储的是key值
fastcgi_cache_key $request_uri;
# 调用缓存的磁盘存储空间,这里存储的是value值
fastcgi_cache fcgi_cache;
# 指定可以缓存的状态码
fastcgi_cache_valid 200 30s;
fastcgi_cache_valid 301 302 1m;
fastcgi_cache_valid any 10s;
}

ngx_http_rewrite_module(重定向)的更多相关文章

  1. Nginx常用模块及作用

    Nginx模块详解 nginx模块分为两种,官方和第三方,我们通过命令 nginx -V 查看 nginx已经安装的模块! [root@localhost ~]# nginx -V nginx ver ...

  2. Nginx 之四: Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能

    一:Nginx 后端服务器组的配置: 1.upstream: 用于设置后端服务器组的主要指令,upstream类似于之前的server块或http块,用法如下: upstreame Myserver{ ...

  3. Nginx服务器的rewrite、全局变量、重定向和防盗链相关功能

    一:Nginx 后端服务器组的配置: 1.upstream: 用于设置后端服务器组的主要指令,upstream类似于之前的server块或http块,用法如下: upstreame Myserver{ ...

  4. Nginx 模块 - ngx_http_rewrite_module

    原文地址 ngx_http_rewrite_module 模块用于通过 PCRE 正则表达式改变请求 URI,返回重定向并可以有条件地选择配置. break.if.return.rewrite 以及 ...

  5. Nginx Rewrite资源重定向

    # Rewrite功能配置 # Rewrite功能主要是实现了url重写 # 如:你输入www.jd123.com,你可以通过Rewrite让它重定向到www.jd.com # Rewrite的实现依 ...

  6. Http状态码之:301、302重定向

    概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一.如果可能,拥有链接编辑功能的客户端应当自动把请求的地 ...

  7. 前端学HTTP之重定向和负载均衡

    前面的话 HTTP并不是独自运行在网上的.很多协议都会在HTTP报文的传输过程中对其数据进行管理.HTTP只关心旅程的端点(发送者和接收者),但在包含有镜像服务器.Web代理和缓存的网络世界中,HTT ...

  8. Web安全相关(三):开放重定向(Open Redirection)

    简介 那些通过请求(如查询字符串和表单数据)指定重定向URL的Web程序可能会被篡改,而把用户重定向到外部的恶意URL.这种篡改就被称为开发重定向攻击.   场景分析 假设有一个正规网站http:// ...

  9. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

随机推荐

  1. 树莓派3B+学习笔记:11、查看硬件信息

    1.查看CPU信息 cat /proc/cpuinfo 查看最后三行 如果只想查看最后三行,也可使用这个命令 /proc/cpuinfo lscpu 2.查看树莓派型号 cat /proc/devic ...

  2. Python学习 :多线程 --- 锁

    多线程 什么是锁? - 锁通常被用来实现对共享资源的同步访问. - 为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线 ...

  3. 20155218 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155218 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 实验结果截图: (二)使用IDEA编辑.编 ...

  4. 20155318 《Java程序设计》实验三 (敏捷开发与XP实践)实验报告

    20155318 <Java程序设计>实验三 (敏捷开发与XP实践)实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化 ...

  5. su的使用与退出

    偶尔用回到ubuntu系统,想切换到su,总是显示不成功,也许是初次使用,即需要设定一下: 使用sudo $:sudo passwd 系统提示输入密码,即安装时的用户密码,然后,系统提示输入两次新密码 ...

  6. 杂谈001:晨曦Dawn的重新连接

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 摘要: 我是晨曦,好久没有关注过我的博客了,整天都在乱糟糟的忙,叙述一下我消失的这段时间,然后我准备做几个专题 ...

  7. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  8. Oracle数据库备份与还原命令

    http://www.2cto.com/database/201305/210262.html

  9. C语言的函数调用过程(栈帧的创建与销毁)

    从汇编的角度解析函数调用过程 看看下面这个简单函数的调用过程: int Add(int x,int y) { ; sum = x + y; return sum; } int main () { ; ...

  10. 译图智讯VIN码识别助力汽配商转型升级

    汽配猫是上海佳驰经合能源科技有限公司自主开发的汽车配件B2B网上商城及服务平台,该平台依托互联网云技术.利用创新的商业模式及互联网思维,整合汽配产业链优秀资源,为汽车维修保养企业等产业链各方面提供汽配 ...