有时用户会手动输入 http://host/path
访问网站,而在nginx 的默认处理中
/path
会被当成一个文件请求,如果 /path
不存在,则判断 /path/
目录 是否存在
如果目录存在则返回重定向
分析
默认的 try_files
配置是: try_files $uri $uri/ =404;
按照 nginx 默认处理方式,这种情况下回产生两次
request
第一次: 请求 /path
,nginx 发现文件不存在,但目录存在,则返回 301 重定向到 /path/
浏览器收到重定向后,发起第二次请求
第二次: 请求 /path/
,nginx 根据 index 设定,返回 /path/index.html
优化
防止产生重定向并直接返回目录内容
location / {
try_files $uri $uri/index.html $uri/index.htm =404;
}
使用 try_files
,此时 nginx 对 /path
请求的工作方式为:
查看 /path
文件是否存在,如果不存在,则查找 /path/index.html
或者 /path/index.htm
是否存在,如果后两者其中一个文件存在,则直接返回文件内容,否则返回 404
状态码
这样省略了 301
重定向,减少了一次请求