nginx正则与pcretest
能配置nginx的正则是运维的一项基本要求,同其他很多应用一样,linux下的正则都是依赖pcre进行的。而pcre安装包里也提供了一相应的工具用于测试正则是否正确,该工具就是pcretest 。
平时在nginx书写正则规则时,常用到的一些正则符号如下表:
而最近在对一台老版本的centos 测试主机上的nginx书写正则规则时,发现([0-9]+)-([0-9]+)可以正常使用,但是换成(d+)-(d+)却不能使用(神奇了,在另一台却是好的) 。为了定位问题,首先对rewrite语句进行pcretest测试,发现规则没有问题,但是nginx就是没生效。
pcretest的用法如下:
1# pcretest
2PCRE version 6.6 06-Feb-2006
3re> /(d+)-(d+)/
4data> 123-456
50: 123-456
61: 123
72: 456
8data> 1-2
90: 1-2
101: 1
112: 2
12data> 23-45
130: 23-45
141: 23
152: 45
输入完命令后,在re>后输入要测试的正则表达式,在data>后输入要被处理的文本,回车后显示的就是$0,$1,$2等各部分显示的值 。
通过pcretest测试完后,发现rewrite没有问题,再通过ldd工具,查看下nginx调用到的lib库文件:
1# ldd /opt/nginx/sbin/nginx
2linux-gate.so.1 => (0x0076c000)
3libpthread.so.0 => /lib/libpthread.so.0 (0×00594000)
4libcrypt.so.1 => /lib/libcrypt.so.1 (0x001b9000)
5libpcre.so.0 => /usr/local/lib/libpcre.so.0 (0x00bcb000)
6libcrypto.so.6 => /lib/libcrypto.so.6 (0×02704000)
7libz.so.1 => /usr/lib/libz.so.1 (0x005ad000)
8libc.so.6 => /lib/libc.so.6 (0x0041f000)
9/lib/ld-linux.so.2 (0x0081c000)
10libdl.so.2 => /lib/libdl.so.2 (0x0058e000)
正则有问题,重点看libpcre库了 。发现使用的/usr/local/lib/libpcre.so.0 ,不属于任何包,这个库从路径上盾应该是手工编译的。不过为了进一步确定是否为rpm包安装,还可以用rpm命令进行进一步的检测:
1# rpm -qf /usr/local/lib/libpcre.so.0.0.1
2file /usr/local/lib/libpcre.so.0.0.1 is not owned by any package
查询下目前系统rpm安装时用到的pcre包的路径:
1# rpm -ql pcre-6.6-6.el5_6.1
2/lib/libpcre.so.0
3/lib/libpcre.so.0.0.1
4/usr/bin/pcregrep
5/usr/bin/pcretest
6/usr/lib/libpcrecpp.so.0
7/usr/lib/libpcrecpp.so.0.0.0
8/usr/lib/libpcreposix.so.0
9/usr/lib/libpcreposix.so.0.0.0
10/usr/share/doc/pcre-6.6
11/usr/share/doc/pcre-6.6/AUTHORS
12/usr/share/doc/pcre-6.6/LICENCE
13/usr/share/man/man1/pcregrep.1.gz
14/usr/share/man/man1/pcretest.1.gz
所以,该问题,应该是nginx调用到的pcre lib文件被别人给清掉或删掉了。所以解决该问题就非常简单了,要么将系统rpm安装的软链接到相应的路径,要么重新安装pcre到/usr/lib/local。
1[root@test ]# ln -s /lib/libpcre.so.0.0.1 /usr/local/lib/
重新安装后,也可以到pcre安装后的bin目录查看,同时会有pcretest会成生。
1[root@back bin]# ls
2pcre-config pcregrep pcretest
3[root@back bin]# pwd
4/usr/local/pcre/bin
5[root@back bin]#
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/nginx-rewrite-pcretest/2438.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.