Nginx处理静态文件请求的配置问题

栏目: 服务器 · Nginx · 发布时间: 8年前

内容简介:Nginx处理静态文件请求的配置问题

查看网站后台log的时候,发现类似“apple-touch-icon-152×152.png”,“apple-touch-icon.png”之类的请求。看文件名是浏览站点时浏览器顺带发出的icon请求,由于网站没有提供icon从而报错。为了避免这个问题,便在web根目录下touch了这类文件。

问题已经解决,事情到这里原本可以告一段落。然而几天前查看另外一个站点的log,发现了同样的提示。多留心一下,发现了问题:web服务器用的Nginx,Nginx中配置了静态文件直接处理,不应该转发到后端PHP。这样的错误是怎么回事?

查看Nginx的转发规则,配置如下:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}
 
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    expires max;
    try_files $uri =404;
}
 
location ~ ^/assets/.*\.php$ {
    deny all;
}
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/dev/shm/phpfpm.sock;
    try_files $uri =404;
}
 
location ~* /\. {
    deny all;
}
 
error_page 404 /404.html;
location = /40x.html {
}

看上去合情合理:对指定后缀名的静态文件请求,如果文件存在则直接发送,不存在就跳转404页面;PHP请求则通过fastcgi的方式转发到后端PHP-FPM。打脸的事实是,不存在的静态文件,例如/ccc.png,还是转发到了 PHP 端。

为了查找问题所在,首先在/段的规则改一下,当文件不存在时直接404。即进行如下配置:

location / {
    try_files $uri $uri/ =404;
}

重启服务器后,发现运转正常,说明问题出在将请求转发到了PHP。

接着把PHP段的配置注释掉,再次访问,提示服务器错误。在Nginx的error日志上看到如下记录:

2017/05/27 10:44:28 [error] 6515#0: *919rewrite or internal redirection cycle while internally redirecting to "/404.html//////////", client: 10.0.2.2, server: , request: "GET /cccc.png HTTP/1.1", host: "localhost:8081"

看情况是404页面被多次重定向。再回顾配置,试图解释这一现象发生的原因: 根据规则优先级,先匹配了 .png;Nginx去磁盘找文件,发现文件不存在就转到404;配置指定了404页面为 /404.html;接着处理/404.html,匹配到了 / 规则,于是出现了//404.html//////////的请求。

分析出了原因,问题就比较好解决了。一种办法是将规则中的 /40x.html 改成 /404.html;或者将error_page和 /40x.html的都注释掉,让Nginx处理404页面。

注释掉404的配置后,访问效果如图:

Nginx处理静态文件请求的配置问题

参考

  1. https://tlanyan.me/nginx-location-syntax/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Master Switch

The Master Switch

Tim Wu / Knopf / 2010-11-2 / USD 27.95

In this age of an open Internet, it is easy to forget that every American information industry, beginning with the telephone, has eventually been taken captive by some ruthless monopoly or cartel. Wit......一起来看看 《The Master Switch》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具