Nginx - 静态内容

Nginx - 静态内容 首页 / Nginx入门教程 / Nginx - 静态内容

在本节中,我们将讨论如何配置Nginx Plus和Nginx开源来提供静态内容。

根目录和索引文件

root指令用于定义将用于搜索文件的根目录。为了获得请求文件的路径,NGINX将请求的URI附加到root指令定义的路径上。伪指令可以放在server{},http {}或location{}上下文中的任何级别上。

让我们看一个例子;在此,为虚拟服务器指定了根指令。它适用于未添加root指令以显式重新定义root的所有location{}块:

server {
    root /www/data;

    location/{
    }

    location /images/ {
    }

    location ~ \.(mp3|mp4) {
        root /www/media;
    }
}

在上面的示例中,NGINX在文件系统的/www/data/images/ 目录中搜索以/images/开头的URI(统一资源标识符)。但是,如果URI以.mp3或.mp4扩展名结尾,则NGINX会在/ www/media/目录中查找文件,因为它是在匹配的位置块中指定的。

如果请求后缀带有斜杠,NGINX会将其视为对目录的请求,并尝试在目录中查找索引文件。 index指令指定索引文件的名称(默认值为index.html)。继续该示例,如果请求URI为/images/some/path/,NGINX会提供文件 /www/data/images/some/path/index.html 如果存在。如果没有,则默认情况下,NGINX返回HTTP代码404(未找到)。要将NGINX配置为返回自动生成的目录列表,请在auto index指令中添加" on"参数:

location /images/ {
    autoindex on;
}

我们可以在index指令中列出多个文件名。 NGINX按照指定的顺序查找文件,并返回找到的第一个文件。

location/{
    index index.$geo.html index.htm index.html;
}

此处使用的$geo变量是通过geo指令设置的自定义变量。变量的值取决于客户端的IP地址。

要返回索引文件,NGINX会检查该文件是否存在,然后对通过将索引文件的名称附加到基本URI所获得的URI进行内部重定向。内部重定向的结果是对位置的全新搜索,并且可以最终在另一个位置中显示,如以下示例所示:

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

location ~ \.php {
    fastcgi_pass localhost:8000;
    #...
}

在上面的示例中,如果请求中的URI为/path/,并且/data/path/index.html不存在,但/data/path/index.php存在,则对/path/index.php的内部重定向为映射到第二个位置。结果,该请求被代理。

Try_files 指令

try_files指令可用于检查定义的文件或目录是否存在; NGINX会进行内部重定向,否则会返回指定的状态码。例如,要检查文件是否存在或与请求URI不对应,请使用try_files指令和$uri变量,如下所示:

server {
    root /www/data;

    location /images/ {
        try_files $uri /images/default.gif;
    }
}

该文件以URI的形式定义,该URI使用在当前位置或虚拟服务器的上下文中设置的root或alias伪指令进行处理。在这种情况下,如果不存在与原始URI对应的文件,则NGINX将内部重定向到最后一个参数指定的URI,并返回/www/data/images/default.gif。

无涯教程网

链接:https://www.learnfk.comhttps://www.learnfk.com/nginx/nginx-serving-static-content.html

来源:LearnFk无涯教程网

最后一个参数也可以是状态代码,该状态代码后接等号或位置名称。在下面的示例中,如果try_files指令的任何参数都没有解析为现有文件或目录,则返回404错误。

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

优化性能

加载速度是提供任何内容的关键因素。对我们的NGINX配置进行较小的优化可以提高生产率,并有助于达到最佳性能。

启用发送文件(Enabling sendfile)

默认情况下,NGINX自己控制文件传输并将文件复制到缓冲区中,然后再发送。当我们启用sendfile指令时,它将消除将数据复制到缓冲区的步骤,并允许将数据从一个文件描述符直接复制到另一个文件描述符。另外,要阻止快速连接完全占用工作进程,我们可以使用sendfile_max_chunk指令来限制单个sendfile()调用中传输的数据量(在此示例中为1 MB):

location /mp3 {
    sendfile           on;
    sendfile_max_chunk 1m;
    #...
}

enabling tcp_nopush

将tcp_nopush指令与该指令中的sendfile一起添加。这使得NGINX在从sendfile()获得数据块之后立即在一个数据包中发送HTTP响应头。

location /mp3 {
    sendfile   on;
    tcp_nopush on;
    #...
}

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出区块链 -〔陈浩〕

硅谷产品实战36讲 -〔曲晓音〕

To B市场品牌实战课 -〔曹林〕

Python自动化办公实战课 -〔尹会生〕

说透区块链 -〔自游〕

郭东白的架构课 -〔郭东白〕

遗留系统现代化实战 -〔姚琪琳〕

林外 · 专利写作第一课 -〔林外〕

Dubbo源码剖析与实战 -〔何辉〕

好记忆不如烂笔头。留下您的足迹吧 :)