Nginx支援url不區分大小寫

potpt發表於2020-12-20

將Windows下的專案(如:php)遷移到Linux下,由於Windows作業系統中,檔名是不區分大小寫的;而Linux系統是大小寫敏感,會導致有些網頁出現404情況。
那麼,怎樣Nginx實現url請求不區分大小寫呢?
下面是安裝lua模組的方式。lua-nginx-module來自大牛agentzh的開源專案,在Nginx中嵌入Lua語言,使之可以支援強大Lua語法。

安裝lua
1、下載lua
wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz

2、安裝lua
tar -xvzf LuaJIT-2.0.2.tar.gz

cd LuaJIT-2.0.2

make && make install

3、配置lua
在當前使用者的home目錄下,編輯.bashrc,新增:

export LUAJIT_LIB="/usr/local/lib"
export LUAJIT_INC="/usr/local/include/luajit-2.0"
使配置立即生效,source .bashrc

下載nginx-lua
1).在opt目錄下,下載nginx-lua模組
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz

2).解壓模組
tar -xvzf v0.3.0.tar.gz

tar -xvzf v0.10.9rc7.tar.gz

編譯安裝nginx-lua
1).進入nginx原始碼目錄

2).參考nginx -V中的引數,新增add-module編譯引數:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --add-module=/opt/ngx_devel_kit-0.3.0 --add-module=/opt/lua-nginx-module-0.10.9rc7

3).編譯
make

注意,一定不要make install

4).替換nginx二進位制檔案

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

關閉nginx服務
/usr/local/nginx/sbin/nginx -s stop

繼續替換檔案
cp ./objs/nginx /usr/local/nginx/sbin/

5).重新讀取庫檔案
ldconfig

6).啟動nginx
檢查配置檔案
/usr/local/nginx/sbin/nginx -t
啟動nginx
/usr/local/sbin/nginx

nginx-lua使用
修改nginx.conf檔案:

location / {
if ($uri ~ [A-Z]){
rewrite_by_lua ‘return ngx.redirect(string.lower(ngx.var.uri),ngx.HTTP_MOVED_PERMANENTLY)’;
}
}

#可能出現的錯誤
1).錯誤資訊
Nginx重新啟動給出如下資訊:
[emerg] 65814#0: getpwnam(“www”) failed

問題原因
沒有建立www這個使用者。
解決
建立組和使用者。

/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
2).錯誤資訊
Nginx重新啟動會提示
/usr/local/luaNginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

解決
查詢需要的元件路徑
find / -name libluajit-5.1.so.2
發現路徑為/usr/local/lib/
新增到/etc/ld.so.conf檔案下面
更新連線ldconfig

相關文章