首页模块(ngx_http_index_module)
ngx_http_index_module模块处理以斜线字符(’/’)结尾的请求。
首页模块 语法及语义
index
语法:index file …;
语义:定义将用作索引的文件。该file名称可以包含变量。文件以指定顺序检查。列表的最后一个元素可以是具有绝对路径的文件。
应当注意,使用索引文件会导致内部重定向,并且可以在其他位置除了请求。
例如:
location = / {
index index.html;
}
location / {
...
}
" /“请求实际上将在第二个位置作为”/index.html"处理。也就是说当请求在第一个位置处理完后,会重定向到第二个位置继续进行处理。
首页模块 示例
为演示效果,在/usr/local/nginx/html/目录下新建如下目录和文件:
在默认nginx.conf基础上增加ngx_http_index_module配置,如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name securitit;
location / {
root html/request;
index example.html;
}
}
}
此时访问http://192.168.20.9/,会直接访问到/usr/local/nginx/html/request/目录下的文件:
在配置文件的server中增加location配置,配置如下:
server {
listen 80;
server_name securitit;
location / {
root html/request;
index example.html;
}
location ~* \.html$ {
root html/redirect;
index example.html;
}
}
此时访问http://192.168.20.9/,由于进行内部重定向,会访问到/usr/local/nginx/html/redirect/目录下的文件:
需要注意的是,index指令并不是简单的查找文件进行响应:
· 如果文件存在,则使用文件作为路径,发起内部重定向。
· 内部重定向只能发生在同一个Server内部搜索。
· 如果内部重定向发生在proxy_pass反向代理后,内部重定向也只会发生在代理配置中的同一个Server。
随机首页模块(ngx_http_random_index_module)
处理以斜杠字符(’/’)结尾的请求,并在目录中选择一个随机文件作为索引文件。该模块在ngx_http_index_module模块之前进行处理。
随机首页模块 配置安装
首先切换到Nginx源码目录,运行./configure --with-http_random_index_module命令。
cd /securitit/nginx-1.19.3
./configure --with-http_random_index_module
配置完成后,执行make命令,但切记,不要执行make install命令。
make
编译完成后,将nginx执行文件复制到/usr/local/nginx/sbin/下(/usr/local/nginx/是Nginx的默认安装目录),复制之前,最好将nginx备份。
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-default
cp /securitit/nginx-1.19.3/objs/nginx /usr/local/nginx/sbin/nginx
通过上面的步骤,已成功将ngx_http_random_index_module模块增加到已安装的Nginx中。
随机首页模块 语法及语义
random_index
语法:random_index on | off;
语义:启用或禁用周围位置的模块处理。
随机首页模块 示例
在/usr/local/nginx/html目录下,一共有三个文件,其中50x.html和index.html是Nginx自带的,redirect.html是新建的页面:
在默认nginx.conf基础上增加ngx_http_random_index_module的配置:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name securitit;
location / {
root html;
random_index on;
index index.html redirect.html;
}
}
}
通过./nginx -s reload平滑重启Nginx之后,在浏览器中一直刷新http://192.168.20.9/,会得到随机的结果:
index.html:
50x.html:
redirect.html:
总结
ngx_http_index_module和ngx_http_random_index_module都是用来处理默认首页的,ngx_http_index_module一般处理时会经常用到,ngx_http_random_index_module的使用频度就没那么高了,但是多了解一些是没有坏处,因为未来可能在某个恰巧不巧的场景下,就会是其完美的发挥场景。