nginx中的index配置

index指令的作用
在前后端分离的基础上,通过Nginx配置,指定网站初始页。

如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在;
文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;
文件可以使用变量$来命名;
index index.$geo.html index.0.html /index.html;

该指令拥有默认值,index index.html ,即,如果没有给出index,默认初始页为index.html
核心内容(中文文档没有或一笔带过,而官方文档作详细解释):
Nginx给了三种方式来选择初始页,三种方式按照顺序来执行:

ngx_http_random_index_module 模块,从给定的目录中随机选择一个文件作为初始页,而且这个动作发生在 ngx_http_index_module 之前,注意:这个模块默认情况下没有被安装,需要在安装时提供配置参数 --with-http_random_index_module;
ngx_http_index_module 模块,根据index指令规则来选择初始页;
ngx_http_autoindex_module 模块,可以使用指定方式,根据给定目录中的文件列表自动生成初始页,这个动作发生在 ngx_http_index_module之后,即只有通过index指令无法确认初始页,此时启用后的自动生成模块才会被使用。
切记,index指令并不是查到文件之后,就直接拿来用了。它的实际工作方式是:

如果文件存在,则使用文件作为路径,发起内部重定向。直观上看上去就像再一次从客户端发起请求,Nginx再一次搜索location一样。

既然是内部重定向,域名+端口不发生变化,所以只会在同一个server下搜索。

同样,如果内部重定向发生在proxy_pass反向代理后,那么重定向只会发生在代理配置中的同一个server。

实例
server {
listen 80;
server_name example.org www.example.org;

location / {
root /data/www;
index index.html index.php;
}

location ~ \.php$ {
root /data/www/test;
}
}

上面的例子中,如果你使用example.org或www.example.org直接发起请求,那么首先会访问到“/”的location,结合root与index指令,会先判断/data/www/index.html是否存在,如果不,则接着查看
/data/www/index.php ,如果存在,则使用/index.php发起内部重定向,就像从客户端再一次发起请求一样,Nginx会再一次搜索location,毫无疑问匹配到第二个~ \.php$,从而访问到/data/www/test/index.php。


 

location / {
            try_files $uri $uri/ /index.php;
}

 

当用户请求 http://localhost/example 时,这里的 $uri 就是 /example。 
try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/example(其中 $root 是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。 
显然,目录中没有叫 example 的文件。然后就看 $uri/,增加了一个 /,也就是看有没有名为 /$root/example/ 的目录。 
又找不到,就会 fall back 到 try_files 的最后一个选项 /index.php,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 http://localhost/index.php。 

 

posted @ 2019-09-10 11:09  車輪の唄  阅读(28113)  评论(0编辑  收藏  举报