nginx忽略URL大小写

从windows转到linux 时,发现很多URL连接到web目录是随意的,但是在linux下是区分大小写的,为了解决这个问题,网上也提供很多方案,比如用perl模块,但是nginx官网已经提示用perl模块有内存溢出的危险,所以第一时间放弃了。另一个是使用第三方模块https://github.com/replay/ngx_http_lower_upper_case 因为nginx不支持动态加载,所以还要重新编译一个nginx,第三种方法是通过lua来实现,类似perl,不过lua 比perl要好很多,看看 http://openresty.org/cn/ 就知道有多火了。既然重新编译nginx那么干脆试试tengine 吧。下面是操作的命令,下载,解压,安装,就不详细描述了

yum install -y lua lua-devel

wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
tar zxf tengine-2.2.0.tar.gz
cd tengine-2.2.0

./configure --prefix=/usr/local/tengine  --with-http_lua_module
make
make install

 

安装后,在配置文件里加上下面内容,即可(注意这个只是一个参考)

        location / {
            root   /wwwroot/web/;
            index  index.html index.htm;
			if ( $uri ~ [A-Z] ){
				 rewrite_by_lua 'return ngx.redirect(string.lower(ngx.var.uri),ngx.HTTP_MOVED_PERMANENTLY)'; 
			}
        }

参考

https://segmentfault.com/q/1010000000265229

https://my.oschina.net/kisops/blog/151087