Nginx-(四)基本模块2
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
配置和验证缓存功能
- 配置
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;
}
}
}
- 验证
a) 使用浏览器访问服务http://IP:PORT/1.php
b) 在另外一台linux主机上使用ab命令
ab -c 10 -n 100 http://IP:PORT/1.PHP
- 查看/tmp/fcgi下是否有缓存文件
Nginx-(四)基本模块2的更多相关文章
- nginx源代码分析--模块分类
ngx-modules Nginx 基本的模块大致能够分为四类: handler – 协同完毕client请求的处理.产生响应数据.比方模块, ngx_http_rewrite_module, ngx ...
- nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问
要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况. 解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要mon ...
- Nginx 的过滤模块是干啥用的?
上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了.这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了.今天这篇文章比较短,看完没问题. 过滤模块的位置 之前我们介绍了 Ng ...
- 附002.Nginx代理相关模块解析
一 ngx_http_proxy_module模块 1.1 proxy_pass配置 proxy_pass URL; Context: location, if in location, limit_ ...
- Nginx使用Lua模块实现WAF
前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了WAF相关知识,刚好Nginx可以实现WAF功能,也简单学习了Lua这门语言,分享下 一.WAF产生的背景 过去企业通常会 ...
- nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...
- php5.5安装及phpmyadmin&nginx配置php模块
安装php5.5: 下载源地址:rpm -Uvh rpm包安装:yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php ...
- 为nginx增加nginx_http_concat模块
为nginx增加nginx_http_concat模块 时间 2013-06-05 22:14:56 我行我思 原文 http://www.fanjun.me/?p=562 主题 Nginx 缘由 ...
- Nginx SPDY Pagespeed模块编译——加速网站载入
在看<Web性能权威指南>的时候,看到了SPDY这货,于是便开始折腾起了这个了,也顺便把pagespeed加了进去. Nginx SPDY 引自百科~~ SPDY(读作“SPeeDY”)是 ...
- Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug
< 让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能>一文介绍了 Nginx 的在线统计模块. 我们的在线直播服务使用了 Nginx 的 Rtmp ...
随机推荐
- 函数基础(三) 装饰器\闭包 day 12
目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...
- OptimalSolution(5)--数组和矩阵问题(1)简单
一.转圈打印矩阵 题目:给定一个整型矩阵matrix,按照转圈的方式打印它. 要求:额外空间复杂度为O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为: ...
- Vue躬行记(5)——组件通信
组件之间除了保持独立之外,还需要相互通信,本章将介绍几种通信的方式. 一.直接访问 Vue提供了三个实例属性,可直接访问父组件.子组件和根实例,如下所列. (1)$parent:父组件. (2)$ro ...
- swift 实现iOS手势密码、指纹密码、faceID
本博客包含了如何实现iOS手势密码.指纹密码.faceID全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBTouchID,支持swift3. ...
- (Java) byte[] 和 base64 字符串之间的转换
import org.apache.commons.codec.binary.Base64; public class UtilHelper { //base64字符串转byte[] public s ...
- ETCD节点故障恢复
我在微服务组里面主要负责配置中心的构建,我们的配置中心使用到了ETCD.在我们的内网环境中搭建了三个节点的ETCD,不过这三个节点的ETCD都搭建在同一台机器上.后来机器资源不够了系统直接kill了E ...
- deepin扬声器/耳机没有声音解决方案
昨天准备在deepin系统下看视频学习一下Linux,结果登入deepin系统后发现不论是外放还是插耳机竟然都没有声音,这种情况以前也出现过,只不过没有在意,后来就自己又好了,今天这次可真是让我决定要 ...
- 学习笔记66_DBSCAN聚类算法
- 【转载】InstantRun 原理——深度剖析 AndroidStudio 2.0
一.前言 Android Studio 2.0开始支持 Instant Run 特性, 使得在开发过程中能快速将代码变化更新到设备上.之前,更新代码之后需要先编译一个完整的新Apk,卸载设备上已安装的 ...
- [LLL邀请赛]参观路线(图论+dfs)
emmmm....学校的oj被查水表了,扒不到原题面,所以.... 但是我还是扒到了题面... 题目大意:给定一个完全图,删掉其中一些边,然后求其字典序最小的遍历顺序 有点像去年day2T1啊.... ...