时间:2021-05-19
Nginx的配置语法灵活,可控制度非常高。在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率。
try_files指令说明
try_files指令
语法:try_files file ... uri 或 try_files file ... = code
默认值:无
作用域:server location
其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args不会自动保留,如果你想保留$args,则必须明确声明。
try_files $uri $uri/ /index.php?q=$uri&$args;实例分析
示例一
try_files 将尝试你列出的文件并设置内部文件指向。
例如:
try_files /app/cache/ $uri @fallback; index index.php index.html;它将检测$document_root/app/cache/index.php,$document_root/app/cache/index.html 和 $document_root$uri是否存在,如果不存在着内部重定向到@fallback(@表示配置文件中预定义标记点) 。
你也可以使用一个文件或者状态码(=404)作为最后一个参数,如果是最后一个参数是文件,那么这个文件必须存在。
示例二
例如nginx不解析PHP文件,以文本代码返回
try_files $uri /cache.php @fallback;因为这个指令设置内部文件指向到 $document_root/cache.php 并返回,但没有发生内部重定向,因而没有进行location段处理而返回文本 。
(如果加上index指令可以解析PHP是因为index会触发一个内部重定向)
示例三
跳转到变量
server { listen 8000; server_name 192.168.119.100; root html; index index.html index.php; location /abc { try_files /4.html /5.html @qwe; #检测文件4.html和5.html,如果存在正常显示,不存在就去查找@qwe值} location @qwe { rewrite ^/(.*)$ http://; #跳转到百度页面 }示例四
跳转指定文件
server { listen 8000; server_name 192.168.119.100; root html; index index.php index.html; location /abc { try_files /4.html /5.html /6.html; }示例五
将请求跳转到后端
upstream tornado { server 127.0.0.1:8001;} server { server_name imike.me; return 301 $scheme:///test.jpg时先去检查/web/wwwroot/static/test.jpg是否存在,不存在就取/web/wwwroot/test.jpg但由于最后一个参数是一个内部重定向,所以并不会检查/web/wwwroot/test.jpg是否存在,只要第一个路径不存在就会重新向然后再进入这个location造成死循环。结果出现500 Internal Server Error
location ~.*\.(gif|jpg|jpeg|png)$ { root /web/wwwroot; try_files /static/$uri $uri 404;}这样才会先检查/web/wwwroot/static/test.jpg是否存在,不存在就取/web/wwwroot/test.jpg再不存在则返回404 not found
常见错误二
Nginx try_files $query_string为空的解决办法
server { listen 80; server_name localhost.dev; index index.php index.html index.htm; set $root_path '/var/www/phalcon/public'; root $root_path; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; }}发现PHP无法获取$_GET信息
try_files $uri $uri/ /index.php;改为
try_files $uri $uri/ /index.php?$query_string;即可解决,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、Nginx反向代理配置:1、虚拟主机配置复制代码代码如下:location/{try_files$uri@apache;}location@apache{i
如果是用lnmp脚本一键安装的开发环境,可以通过如下方式开户pathinfo:1、注释nginx.conf中的try_files(因为跟pathinfo.con
laravel基本重写规则location/{indexindex.htmlindex.htmindex.php;try_files$uri$uri//inde
Nginx中的Location指令是NginxHttpCoreModule中重要指令。Location指令比较简单,但却是配置Nginx过程中不得不去了解的。L
1、fastcgi,通过flup模块来支持,在nginx里对应的配置指令是fastcgi_pass2、http,nginx使用proxy_pass转发,这个要求