设为首页 收藏本站
查看: 1910|回复: 0

[经验分享] Nginx将utf8编码的url解码成\x的16进制格式导致无法匹配静态...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-25 10:39:43 | 显示全部楼层 |阅读模式
Nginx将utf8编码的url解码成\x的16进制格式导致无法匹配静态文件的问题处理
例如请求/touch/article/北京/full.html,到达nginx后变成/ /touch/article/%E5%8C%97%E4%BA%AC/full.html,
Nginx静态文件配置:
    location ~* ^/touch/article/.*\.html$ {
        expires -1;
        root /home/htmlfile;
        charset UTF-8;
        if ( !-f $request_filename ){
            proxy_pass http://client.api.com;
        }
      }
实际请求的地址为/home/htmlfile/touch/article/\xE5\x8C\x97\xE4\xBA\xAC/full.html,将url进行了解码处理,但是这种16进制格式无法匹配静态目录,解决方法:

       location ~* ^/touch/article/.*\.html$ {
          charset utf-8;
          alias /home/htmlfile$request_uri;
          # charset utf-8;
          if ( !-f $request_filename ){
         proxy_pass http://client.api.com;
          }
       }
通过alias命令和$request_uri变量,指向正确的静态文件。
注:1)$request_uri #包含请求参数的原始URI
    $uri #不带请求参数的当前URI,即转换后的地址
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成,即root   
经过一系列优化等处理后实际指向的本地文件路径
2)root与alias区别:
nginx指定文件路径有两种方式root和alias,root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
实例:

location ~ ^/weblogs/ {
    root /data/weblogs/www.ttlsa.com;
    autoindex on;
    auth_basic            "Restricted";
    auth_basic_user_file  passwd/weblogs;
}
如果一个请求的URI是/weblogs/httplogs/www.ttlsa.com-access.log时,web服务器将会返回服务器上的/data/weblogs/www.ttlsa.com/weblogs/httplogs/www.ttlsa.com-access.log的文件。
[info]root会根据完整的URI请求来映射,也就是/path/uri。[/info]
因此,前面的请求映射为path/weblogs/httplogs/www.ttlsa.com-access.log。
location ^~ /binapp/ {  
    limit_conn limit 4;
    limit_rate 200k;
    internal;  
    alias /data/statics/bin/apps/;
}
alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。如果一个请求的URI是/binapp/a.ttlsa.com/favicon时,web服务器将会返回服务器上的/data/statics/bin/apps/a.ttlsa.com/favicon.jgp的文件。
[warning]1. 使用alias时,目录名后面一定要加"/"。
2. alias可以指定任何名称。
3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4. alias只能位于location块中。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290970-1-1.html 上篇帖子: nginx添加ssl模块 下篇帖子: Nginx和tomcat跨域问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表