详解nginx如何代理静态资源(长搜索路径优先)

简介: 详解nginx如何代理静态资源(长搜索路径优先)

web服务器重要的的任务之一就是服务静态资源文件,比如网站的图片,还有一些静态的HTML页面,本文的例子还是来自于Nginx官网。在这个用例中我们要配置两个静态资源路径,来处理外部的静态资源请求。我们会更改配置文件中,server块下http下的location。

首先需要创建/data/www目录,然后将index.html文件,文件的内容并不重要,本例只是指引我们观察nginx如何找到和发送静态资源。然后在创建一个/data/images目录,并放置一些图片文件。

下一步打开配置文件,默认的配置文件中已经包含了一些server块,大多数已经注释掉了,官网让我们把server块都注释掉,重写写一个新的空的server块,但注意,一定不要将http注释掉,nginx通过识别它才能知道我们需要处理的是http请求。

通常,配置文件可能会包含多个server块,这些server块可以由端口号区分,也可以由server names来区分。当nginx决定由哪一个server去处理请求的时候,nginx会根据server块中location参数去测试请求头中指定的URI

现在在server块中添加location块

location / {
    root /data/www;
}

nginx静态资源映射策略

该location块指定了URI请求的根目录前缀,"/"。对于请求来讲,URI被添加在root路径具体指向的目标路径,如果存在的多个匹配的位置块,nginx将选择前缀最长的位置块(可能是因为更加具体)。上方的location块提供的已经是最短前缀了,也就是说,server块中所有的location块如果都没有匹配到,则该location块将会被采用。

官网的说法真的非常绕,我觉得思路就是,nginx首先会优先去具体的location块匹配资源(规则是参数越长,越优先查找),如果都查不到就去根路径查。

我们再加一个location块

location /images/ {
    root /data;
}

这个location块会匹配以/images/开始的请求,但上一个(location块 location / 也会匹配该内容,记得吗,Nginx会先匹配长路径location块)

现在为了看的更加清楚,在加过这两部分内容之后的配置文件应该长这样

server {
    location / {
        root /data/www;
    }
    location /images/ {
        root /data;
    }
}

重新加载nginx之后,配置会更新,使用:

nginx -s reload

现在该配置文件已经生效了,配置在监听80端口的本地服务器上,我们可以在本地访问http://localhost/,在此之后例如 http://localhost/images/example.png这样的请求, Nginx会映射到location /images/去,如果请求的资源不存在,Nginx将返回404页面,404页面是可以定制的,一般企业也会定制属于自己的404页面。

后续

后续的内容我还打算针对一些常见场景,记录以下nginx的配置文件针对不同场景和需求该如何去写,以及为什么这么写。Nginx一些模块的详细介绍不打算专门写,大家如果有需求可以看官方文档。

Reference

http://nginx.org/en/docs/beginners_guide.html#conf_structure

本文转载至

  • Post author:SHIWEI MO
  • Post link: [https://mirrorgo.top/nginx_static_content/ "什么是docker-compose?和Dockerfile有什么区别?快速部署django项目")
  • Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.


相关文章
|
4天前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
46 4
|
4天前
|
编解码 应用服务中间件 nginx
百度搜索:蓝易云【基于Nginx与Nginx-rtmp-module实现】
综上所述,基于Nginx与Nginx-rtmp-module的组合,可以搭建一个功能强大的流媒体服务器,用于实现直播和点播服务。
47 1
|
4天前
|
应用服务中间件 nginx
百度搜索:蓝易云【利用nginx内置ngx_http_mirror_module模块实现流量复制及流量放大】
以上就是使用Nginx内置 `ngx_http_mirror_module`模块实现流量复制和流量放大的简要示例。通过合理配置和利用该模块,可以实现更复杂的流量控制和调试需求。
67 1
|
4天前
|
监控 JavaScript 安全
百度搜索:蓝易云【如何使用nginxWebUI图形化gui界面管理nginx】
虽然Nginx本身没有官方提供的图形化GUI界面,但使用第三方工具nginx-proxy-manager可以实现通过WebUI图形化界面来管理Nginx的反向代理规则。这样,你可以更方便地进行配置和管理,而无需手动修改Nginx配置文件。
63 0
|
4天前
|
应用服务中间件 nginx
百度搜索:蓝易云【HTTP请求是如何关联Nginx server{}块的?】
总结来说,Nginx中的 `server{}`块用于关联HTTP请求和虚拟主机,通过配置不同的 `server{}`块,可以实现多个域名或IP地址的请求分发和处理。这样,Nginx可以根据不同的请求来提供不同的服务和内容。
39 0
|
4天前
|
应用服务中间件 nginx
百度搜索:蓝易云【如何用NGINX实现UDP四层反向代理?】
请注意,这个回答是基于NGINX目前的特性和功能,如果有新的版本或更新的特性,建议查阅NGINX官方文档或其他权威资源,以确保你得到最准确的配置信息。
33 0
|
4天前
|
负载均衡 应用服务中间件 nginx
百度搜索:蓝易云【Nginx和tomcat实现负载均衡教程】
至此,你已经成功地使用Nginx和Tomcat实现了负载均衡。Nginx将根据配置的负载均衡策略将客户端请求分发到多个Tomcat服务器上,以提高系统的性能和可用性。请注意,在实际生产环境中,还需要进行其他配置和优化,如健康检查、会话保持等,以满足具体的需求。
38 0
|
4天前
|
安全 应用服务中间件 nginx
百度搜索:蓝易云【使用Debian、Docker和Nginx部署Web应用教程】
这些是在Debian上使用Docker和Nginx部署Web应用的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
49 0
|
4天前
|
负载均衡 安全 前端开发
百度搜索:蓝易云【Nginx与Tomcat负载均衡-动静分离教程】
这些是将Nginx与Tomcat结合使用实现负载均衡和动静分离的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
51 1
|
4天前
|
应用服务中间件 网络安全 nginx
百度搜索:蓝易云【docker搭建nginx教程】
现在,你的Nginx容器已经成功运行。你可以通过访问服务器的IP地址或域名来访问Nginx服务。请确保服务器的防火墙允许访问80端口。
71 0