热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx/Tengine实现网址大小写转换

   最近有一项目需要移植到Linux下,功能简单来讲就是FTP上传+HTTP下载。   由于Windows操作系统中,文件名是不区分大小写的,而Linux系统是大小写敏感,导致对

    最近有一项目需要移植到Linux下,功能简单来讲就是FTP上传+HTTP下载。

    由于Windows操作系统中,文件名是不区分大小写的,而Linux系统是大小写敏感,导致对应开发人员及程序都感冒了!

  解决分3步:

    首先,使用FTP上传时,需要统一大小写。文件名和路径要统一使用大写或小写,推荐用小写。一般主流的FTP工具都支持此类转换:

    Nginx/Tengine实现网址大小写转换

    然后,需要将已上传的目录和文件做一次转换。下例为递归将目录和文件改为小写:

#!/bin/bash
find -exec sh -c 'rm -f "$0" `echo "$0" | tr "[A-Z]" "[a-z]"` > /dev/null 2>&1' {} \;

    最后,在HTTP前端做统一处理,将下载地址进行统一转换。

  转换方法有3种:

    1、使用perl模块(不推荐!Nginx官网已申明perl模块存在内存漏洞的可能,笔者在生产环境中有遇到,推测是在reload时发生的)

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

perl_set $url '
    sub {
            my $r = shift;
            my $re = lc($r->uri);
            return $re;
        }
    ';


server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

         location / {
                 if ($uri ~ [A-Z]){ rewrite ^(.*)$ $url last; }
                 root /usr/share/tengine/html;
                 index  index.html;
         }

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}

    2、使用lua模块(推荐!),示例如下:

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

dso { # DSO module for Tengine
     load ngx_http_lua_module.so;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

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

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}

    3、使用第3方模块(ngx_http_lower_upper_case),示例如下:

user  nobody nobody;
worker_processes  8;
error_log  /data/log/tengine/error.log  error;
pid        /var/run/tengine.pid;

events {
use epoll;
worker_connections  81920;
}

http {
include       mime.types;
default_type  text/plain;
access_log  off;
sendfile        on;
server_tokens off;
keepalive_timeout  120;

server {
         listen       80 backlog=8192;
         server_name  _;
         charset utf-8;

         location / {
                 if ($uri ~ [A-Z]){
                    lower $url "$uri";
                    rewrite ^(.*)$ $url redirect;
                 }
                 root /usr/share/tengine/html;
                 index  index.html;
         }

         location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { deny all; access_log off; log_not_found off; }
  }
}


推荐阅读
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文主要从TLS1.3的优势、部署和时间发展线介绍了这上篇文章回顾:浅谈DHCP协议 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 本文介绍如何利用Scrapyd-Client工具简化Scrapy项目的部署流程。通过该工具,可以轻松将Scrapy项目打包并部署至Scrapyd服务,实现高效的分布式爬虫管理。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • 我们知道CDN护航了双11十年,却不知道背后有那么多故事
    2019独角兽企业重金招聘Python工程师标准摘要:一路走来,文景也曾疑惑过:为什么我们不能把活动的时间跨度拉长到3天࿰ ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
author-avatar
博艺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有