nginx正则:
^~ 标识符后面跟一个字符串。
Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location ^~ /images/,希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* \.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果这样写:location /images/,这样nginx会将1.jpg匹配到location ~* \.(gif|jpg|jpeg)$这个location中,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。
= 表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。
@ 表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。
匹配符1:
~* 不区分大小写的匹配(匹配firefox的正则同时匹配FireFox)。
!~ 不匹配的
!~* 不匹配的
匹配符2:
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
匹配符3:
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
匹配符4:
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 仅是注释内容
1,下载module模块
下载地址:https://nodeload.github.com/yaoweibin/nginx_tcp_proxy_module/zipball/master
解压并打上补丁:
$ tar -xzvf nginx-1.2.1.tar.gz
$ cd nginx-1.2.1/
$ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch /path是指nginx_tcp_proxy_module路径
$ ./configure --add-module=/usr/local/ngx_cache_purge-1.4 --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=/path/to/nginx_tcp_proxy_module //
编译:
$ make install
2,修改nginx配置文件:
server {
listen 80;
location /status {
check_status;
}
}
}
tcp {
upstream mysql{
server 10.10.10.17:3306 weight=1;
server 10.10.10.18:3306 weight=1;
#check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 3306;
proxy_pass mysql;
}
}
3,启动nginx进行测试,以下为测试log:
2013/7/16 18:22:32 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:32 10.10.10.17:3306 1446 4383
2013/7/16 18:22:33 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:32 10.10.10.18:3306 1447 4383
2013/7/16 18:22:33 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:33 10.10.10.17:3306 1445 4383
2013/7/16 18:22:34 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:33 10.10.10.18:3306 1445 4383
2013/7/16 18:22:34 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:34 10.10.10.17:3306 1446 4383
2013/7/16 18:22:35 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:34 10.10.10.18:3306 1445 4383
2013/7/16 18:22:35 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:35 10.10.10.17:3306 1445 4383
2013/7/16 18:22:36 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:35 10.10.10.18:3306 1445 4383
2013/7/16 18:22:37 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:36 10.10.10.17:3306 1446 4383
2013/7/16 18:22:37 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:37 10.10.10.18:3306 1446 4383
2013/7/16 18:22:37 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:37 10.10.10.17:3306 1445 4383
2013/7/16 18:22:38 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:37 10.10.10.18:3306 1444 4383
2013/7/16 18:22:39 [3921] 10.10.10.107 0.0.0.0:3306 2013/7/16 18:22:38 10.10.10.17:3306 1445 4383
Nginx的默认日志时间格式为:
23/Aug/2010:17:26:44 +0800
1.修改src/http/modules/ngx_http_log_module.c
第一处
修改前:
ngx_http_log_time },
修改后:
ngx_http_log_time },
第二处
修改前:
ngx_cached_http_log_time.len);
修改后:
ngx_cached_err_log_time.len);
2、修改 src/core/ngx_times.c 140行
修改前
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec);
修改后
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec);
效果对比:
修改前:
修改后
附,nginx平滑升级的配置方法。
有关nginx平滑升级的文章,之前也有介绍,例如:
nginx平滑重启的方法介绍
nginx平滑升级与重启
nginx平滑重启和升级的方法介绍
本节实现将Nginx平滑升级到稳定版1.0.0。
1、下载最新的Nginx源码安装包
2、配置并编译Nginx(不要执行make install步骤)
# tar zxvf nginx-1.0.0.tar.gz
# cd nginx-1.0.0
#./configure --user=www --group=www --prefix=/web/nginx --with-http_stub_status_module --with-http_ssl_module
# make
(make编译下就OK,不要执行make install。)
3、替换旧版本的Nginx
备份旧版本的nginx的二进制文件。
在objs目录下可以看到刚刚编译好的新版本的nginx的二进制文件。
复制新版本的nginx文件到你的nginx目录。
# /web/nginx/sbin/nginx -t
测试新版本的nginx是否配置正常。如果提示:
the configuration file /web/nginx/conf/nginx.conf syntax is ok
configuration file /web/nginx/conf/nginx.conf test is successful
则表示配置正确。
让nginx把nginx.pid改成nginx.pid.oldbin并接着启动新的nginx。
退出旧版本的nignx。
4、确认升级是否完成
整个升级过程就完成了,最后确认一下升级是否成功。
重新加载配置。
获取Nginx版本信息,提示:
nginx version: nginx/1.0.0
则升级成功。