nginx常用模块介绍(二)

ngx_http_rewrite_module模块配置

(1)       rewrite  regex  replacement [flag];

将请求的url基于正则表达式进行重写;

a)         regex:正则表达式,用于匹配用户请求的url;

b)         replacement:重写为的结果;

c)         [flag]:

last:类似于bash编程中的continue指令,重写完成之后停止对当前uri的进一步处理(终止本次循环),改为对新url的新一轮处理;

break:类似于bash编程中的breake指令,重写完成之后停止当uri的处理(跳出rewrite),转向其后面的其它配置;

redirect:重写完成之后会返回客户端一个临时的重定向,由客户端对新的url重新发起请求(302);

permanent:重写完成之后会返回客户端一个永久的重定向,由客户端对新的url重新发起请求(301);

d)         工作流程:

1st)   基于server_name匹配对应的虚拟主机

2nd)  匹配虚拟主机中的对应的location

3rd)   将用户请求的URI做正则表达式匹配,匹配到是将URI替换为replacement指定的字符串

4th)   在同一个location中的多个rewrite规则会自上而下被匹配,可以使用flag控制此功能。

注意当replacement内容为http或https开头时,则替换结果直接以重定向方式发送给请求端

eg:server {

...

rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;

rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;

return  403;

...

}

http://www.magedu.com/download/a/b/c/media/32.wmv  -->

/download/a/b/c/mp3/32.mp3

补充:PCRE正则表达式元字符

字符匹配:., [ ], [^]

次数匹配:*, +, ?, {m}, {m,}, {m,n}

位置锚定:^, $

或者:|

分组:(), 后向引用, $1, $2, ...

(2)       if (condition) { ... }

条件判断,引用新的配置上下文;

condition:

比较表达式:

==,!=

~:模式匹配,区分字符大小写;

~*:模式匹配,不区分字符大小写;

!~:模式不匹配,区分字符大小写;

!~*: 模式不匹配,不区分字符大小写;

文件及目录判断:

-f, !-f:是否存在且为普通文件;

-d, !-d: 是否存在且为目录;

-e, !-e:是否存在;

-x, !-x:是否存在且可执行;

(3)       return code [text];

return code URL;

return URL;

立即停止对请求的uri的处理,并返回指定的状态码;

(4)       set $variable  value;

自定义变量,变量赋值;

(5)       rewrite_log on | off;

是否将重写日志记入error log中,默认为关闭;

调试方法:

错误日志debug;

开启rewrite_log;

ngx_http_gzip_module模块配置

gzip on | off;

启用或禁用gzip压缩响应报文;

gzip_comp_level level;

压缩比,1-9,默认为1;

gzip_disable regex ...;

regex是为用于匹配客户端响应器类型的正则表达式;

表示对何种浏览器禁止使用压缩功能;

gzip_min_length length;

触发压缩功能的响应报文的最小长度;

gzip_http_version 1.0 | 1.1;

设定启用压缩功能时,协议的最小版本;

gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

定义对客户端请求的具有何种请求属性的资源启用压缩功能;如expired则表示对由于使用了expire首部而无法缓存的对象启用压缩功能;

gzip_types mime-type ...;

指明仅对哪些类型的资源执行压缩操作;即压缩过滤器;

示例:

gzip  on;

gzip_http_version 1.0;

gzip_comp_level 6;

gzip_disable msie6;

gzip_min_length 2;

gzip_types text/plain text/css text/xml application/x-javascript application/xml application/json application/java-script;

ngx_http_fastcgi_module模块配置(fastcgi协议代理)

CENTOS中,base源中默认有php-fpm所以我们不需要编译安装,直接yum安装。需要编译安装时要想支持fpm机制需要在编译时,使用--enable-fpm将此功能添加。

注意,PHP包是http中的一个模块,NGINX要想使用fpm机制,需要安装的包是php-fpm。

安装,php-fpm和php-mysql

yum -y install php-fpm php-mysql

查看php-fpm安装生成的文件

rpm -ql php-fpm

php-fpm的工作方式:

listen = 127.0.0.1:9000

listen.allowed_clients = 127.0.0.1

pm = dynamic|static

pm.start_servers:启动fpm进程时启动的工作进程数量;

pm.min_spare_servers:最少空闲进程数;

pm.max_spare_servers:最大空闲进程数;

pm.max_children:最大工作进程数;

user = USERNAME

group = GROUPNAME

fastcgi模块指令:

(1)       fastcgi_pass address;

address为fastcgi server监听的地址;

示例:fastcgi_pass   127.0.0.1:9000;

(2)       fastcgi_index name;

定义fastcgi应用的默认主页;

示例:fastcgi_index  index.php;

(3)       fastcgi_param parameter value [if_not_empty];

设定传递给后端fastcgi server参数及其值;

示例:fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

/index.php --> /scripts/index.php

(4)       fastcgi_cache_path path  [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size];

a)         定义缓存:缓存空间等;

b)         可应用的上下文 :http

c)                  缓存机制:在内存中缓存,被缓存文件的元数据,在磁盘上存放元数据所对应的文件。磁盘文件的名字为此文件内容的校验码。例如MD5校验码128位,那么磁盘文件名即是32位16进制数据。在缓存文件众多的时候会导致数据查询慢,所以需要采用分级存储的机制。nginx最多可以使用三级存储,例如第一级使用前两个字符,即有16*16=256个目录,第二级使用前两个字符,即每个一级目录下有16*16=256个子目录,第三级采用1个字符即每个二级自目录下,又有16个子目录。

元数据:内存,即为keys_zone;

数据:磁盘,即为path;

d)         levels=#[:#[:#]]

levels=2:2:1

e)         keys_zone=name:size

用来定义nginx fastcgi使用缓存的名称和大小。

name: cache的标识符;

size:元数据cache大小;

f)          [inactive=time

非活动时间

max_size:缓存空间上限;

(5)       fastcgi_cache zone | off;

调用定义过的缓存;

zone即为通过fastcgi_cache_path定义缓存时其keys_zone参数中的name;

(6)       fastcgi_cache_key string;

定义要使用缓存键;指名用什么当做缓存的key

使用示例:fastcgi_cache_key   $request_uri;

(7)       fastcgi_cache_methods GET | HEAD | POST ...;

为何请求方法对应的请求进行缓存,默认为GET和HEAD;

(8)       fastcgi_cache_min_uses number;

缓存项的最少使用次数;

(9)       fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | off ...;

是否可使用stale缓存项响应用户请求;

(10)   fastcgi_cache_valid [code ...] time;

对不同响应码的响应设定其可缓存时长;

示例:

fastcgi_cache_valid 200 302 10m;

fastcgi_cache_valid 404      1m;

注意:调用缓存时,至少应该指定三个参数

fastcgi_cache

fastcgi_cache_key

fastcgi_cache_valid

配置和验证缓存功能

  1. 配置

http {

include       mime.types;

default_type  application/octet-stream;

fastcgi_cache_path /tmp/fcgi  levels=2:2:1 keys_zone=fcgicache:10m max_size=20m;

server {

listen       80;

server_name  localhost;

location ~ \.php$ {

root   /home/scripts/;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /home/scripts/$fastcgi_script_name;

include        fastcgi_params;

fastcgi_cache fcgicache;

fastcgi_cache_key $request_uri;

fastcgi_cache_valid 200 302 10m;

}

}

}

  1. 验证

a)         使用浏览器访问服务http://IP:PORT/1.php

b)         在另外一台linux主机上使用ab命令

ab -c 10 -n 100 http://IP:PORT/1.PHP

  1. 查看/tmp/fcgi下是否有缓存文件

Nginx-(四)基本模块2的更多相关文章

  1. nginx源代码分析--模块分类

    ngx-modules Nginx 基本的模块大致能够分为四类: handler – 协同完毕client请求的处理.产生响应数据.比方模块, ngx_http_rewrite_module, ngx ...

  2. nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问

    要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况. 解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要mon ...

  3. Nginx 的过滤模块是干啥用的?

    上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了.这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了.今天这篇文章比较短,看完没问题. 过滤模块的位置 之前我们介绍了 Ng ...

  4. 附002.Nginx代理相关模块解析

    一 ngx_http_proxy_module模块 1.1 proxy_pass配置 proxy_pass URL; Context: location, if in location, limit_ ...

  5. Nginx使用Lua模块实现WAF

    前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了WAF相关知识,刚好Nginx可以实现WAF功能,也简单学习了Lua这门语言,分享下 一.WAF产生的背景 过去企业通常会 ...

  6. nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

    geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...

  7. php5.5安装及phpmyadmin&nginx配置php模块

    安装php5.5: 下载源地址:rpm -Uvh rpm包安装:yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php ...

  8. 为nginx增加nginx_http_concat模块

    为nginx增加nginx_http_concat模块 时间 2013-06-05 22:14:56  我行我思 原文  http://www.fanjun.me/?p=562 主题 Nginx 缘由 ...

  9. Nginx SPDY Pagespeed模块编译——加速网站载入

    在看<Web性能权威指南>的时候,看到了SPDY这货,于是便开始折腾起了这个了,也顺便把pagespeed加了进去. Nginx SPDY 引自百科~~ SPDY(读作“SPeeDY”)是 ...

  10. Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug

    < 让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能>一文介绍了 Nginx 的在线统计模块.         我们的在线直播服务使用了 Nginx 的 Rtmp ...

随机推荐

  1. Apache2的安装

    Apache2的安装 1.执行:sudo apt-get install apache2. 2.sudo vim /etc/apache2/apache2.conf在最后加上:ServerName l ...

  2. 过滤器、拦截器和AOP的分析与对比

    目录 一.过滤器(Filter) 1.1 简介 1.2 应用场景 1.3 源码分析 二.拦截器(Interceptor) 2.1 简介 2.2 应用场景 2.2 源码分析 三.面向切面编程(AOP) ...

  3. Airy Memory 内存清理 + 注册码

    链接: https://pan.baidu.com/s/1ZGxDtJBMhrRtBISvL1Lv0w 提取码: ccjs

  4. [考试反思]0902NOIP模拟测试35:摆动

    skyh/Mr.zkt214 cbx204 6个200 4个180 172 162 我:rank16,160 呃,可以看到这个分差.... 对了教练说了两句话需要记录一下: 1.不要因为一时情绪而作出 ...

  5. 【ASP.NET Core学习】Entity Framework Core

    这里介绍在ASP.NET Core中使用EF Core,这里数据库选的是Sql Server 如何使用Sql Server 添加模型 && 数据库迁移 查询数据 保存数据 如何使用Sq ...

  6. 原生JS实现队结构及利用队列模拟‘击鼓传花’游戏

    1. 前言 队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合.队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾. 2.功能说明 enqu ...

  7. CF480E Parking Lot(单调队列+dp然鹅并不是优化)

    (全英文题面所以直接放化简题意) 题意:在一个二维平面内,初始有一些点,然后每个时间点加入一些点,对每个时间点求平面内最大的无障碍正方形 (这次的题目是真的神仙啊...) 首先,考虑暴力,如果对每一个 ...

  8. 最新JetBrains PyCharm 使用教程--常用功能设置(三)

    选择代码路径和Python解释器版本 ​ 设置Pycharm菜单字体的大小 ​ 设置编辑器里面字体大小 ​ 设置文件编码 ​ 设置背景颜色 ​ 设置tab键为4个空格 ​ 设置代码内容和关键字颜色 ​ ...

  9. docker——端口映射

    端口映射 1.就是把容器的端口映射为宿主机的一个随机或者特定端口 2.使得外部用户可以访问容器服务 3.本质其实就是在底层做了iptables地址转发 4.出去的流量是做SNAT原地址转发 5.进来的 ...

  10. 009.Kubernetes二进制部署kube-apiserver

    一 部署master节点 1.1 master节点服务 kubernetes master 节点运行如下组件: kube-apiserver kube-scheduler kube-controlle ...