前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx静态资源服务的配置

Nginx静态资源服务的配置

作者头像
mazhen
发布2023-11-24 16:35:42
3.1K0
发布2023-11-24 16:35:42
举报
文章被收录于专栏:mazhen.techmazhen.tech

配置文件语法

Nginx的配置文件是一个文本文件,由指令和指令块构成。

指令

指令以分号 ; 结尾,指令和参数间以空格分割。

指令块作为容器,将相关的指令组合在一起,用大括号 {} 将它们包围起来。

代码语言:javascript
复制
http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       8080;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
  }
}

上面配置中的http、server、location等都是指令块。指令块配置项之后是否如参数(例如 location /),取决于解析这个块配置项的模块。

指令块配置项是可以嵌套的。内层块会继承父级块包含的指令的设置。有些指令可以出现在多层指令块内,你可以通过在内层指令块包含该指令,来覆盖从父级继承的设置。

Context

一些 top-level 指令被称为 context,将适用于不同流量类型的指令组合在一起。

  • events – 通用的连接处理
  • http – HTTP流量
  • mail – Mail 流量
  • stream – TCP 和 UDP 流量

放在这些 context 之外的指令是在 main context中。

在每个流量处理 context 中,可以包括一个或多个 server 块,用来定义控制请求处理的虚拟服务器。

对于HTTP流量,每个 server 指令块是对特定域名或IP地址访问的控制。通过一个活多个 location 定义如何处理特定的URI。

对于 Mail 和 TCP/UDP 流量,server 指令块是对特定 TCP 端口流量的控制。

静态资源服务

将个人网站的静态资源 clone 到 nginx 根目录:

代码语言:javascript
复制
git clone https://github.com/mz1999/mazhen.git

conf/nginx.conf 文件中配置监听端口和 location

代码语言:javascript
复制
http {
    server {
        listen       8080;
        server_name  localhost;
        
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        
        location / {
            alias   mazhen/;
            #index  index.html index.htm;
        }

}

location 的语法格式为:

代码语言:javascript
复制
location [ = | ~ | ~* | ^~ ] uri { ... }

location 会尝试根据用户请求中的 URI 来匹配上面的 uri 表达式,如果可以匹配,就选择这个 location 块中的配置来处理用户请求。

location 指定文件路径有两种方式:rootalias

rootalias 会以不同的方式将请求映射到服务器的文件上,它们的主要区别在于如何解释 location 后面的 uri

  • root的处理结果是,root+location uri。
  • alias的处理结果是,使用 alias 替换 location urialias 作为一个目录别名的定义。

例如:

代码语言:javascript
复制
location /i/ {
    root /data/w3;
}

如果一个请求的 URI 是 /i/top.gif ,Nginx 将会返回服务器上的 /data/w3/i/top.gif 文件。

代码语言:javascript
复制
location /i/ {
    alias /data/w3/images/;
}

如果一个请求的 URI 是 /i/top.gif,Nginx 将会返回服务器上的 /data/w3/images/top.gif文件。alias 会把 location 后面配置的 uri 替换为 alias 定义的目录。

最后要注意,使用 alias 时,目录名后面一定要加 /

开启gzip

Nginx 的 ngx_http_gzip_module 模块是一个过滤器,它使用 “gzip “方法压缩响应。可以在 http context 下配置 gzip:

代码语言:javascript
复制
http {
    ...
    gzip  on;
    gzip_min_length 1000;
    gzip_comp_level 2;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  
    server {
        ...
    }
}

  • gzip_min_length:设置允许压缩的页面最小字节数
  • gzip_comp_level: 设置 gzip 压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢
  • gzip_types:匹配MIME类型进行压缩。

更多的配置项,可以参考官方文档

autoindex

Nginx 的 ngx_http_autoindex_module 模块处理以斜线字符 / 结尾的请求,并产生一个目录列表。通常情况下,当 ngx_http_index_module 模块找不到index文件时,请求会被传递给 ngx_http_autoindex_module 模块。

autoindex 的配置很简单:

代码语言:javascript
复制
location / {
    alias   mazhen/;
    autoindex on;
}

注意,只有 index 模块找不到index文件时,请求才会被 autoindex 模块处理。我们可以把 mazhen 目录下的 index 文件删掉,或者为 index 指令配置一个不存在的文件。

limit_rate

由于带宽的限制,我们有时候需要限制某些资源向客户端传输响应的速率,例如可以对大文件限速,避免传输大文件占用过多带宽,从而影响其他更重要的小文件(css,js)的传输。我们可以使用 set 指令配合内置变量 $limit_rate 实现这个功能:

代码语言:javascript
复制
location / {
    ...
    set $limit_rate 1k;
}

上面的指令限制了Nginx向客户端发送响应的速率为 1k/秒。

$limit_rate是Nginx的内置变量,Nginx的文档详细列出了每个模块的内置变量。以 ngx_http_core_module 为例,在 Nginx文档首页的 Modules reference 部分,点击进入 ngx_http_core_module

http_core_module
http_core_module

ngx_http_core_module 文档目录的最下方,点击 Embedded Variables ,会跳转到 ngx_http_core_module 内置变量列表:

Embedded Variables
Embedded Variables

这里有 http module 所有内置变量的说明,包括我们刚才使用 $limit_rate

access log

Nginx 的 access log 功能由 ngx_http_log_module 模块提供。ngx_http_log_module 提供了两个指令:

  • log_format 指定日志格式
  • access_log 设置日志写入的路径

举例说明:

代码语言:javascript
复制
http {
    ...
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    server {
        ...
        access_log  logs/mazhen.access.log  main;
    }
}

log_format 使用内置变量定义日志格式,示例中的 log_format 可以使用 http module 定义的内置变量。log_format 还指定了这个日志格式的名称为 main,这样让我们定义多种格式的日志,为不同的 server 配置特定的日志格式。

access_log 设置了日志路径为 logs/mazhen.access.log,并指定了日志格式为 main。示例中的 access_log 定义在 server 下,那所有发往这个 server 的请求日志都使用 main 格式,被记录在 logs/mazhen.access.log文件中。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置文件语法
    • 指令
      • Context
      • 静态资源服务
      • 开启gzip
      • autoindex
      • limit_rate
      • access log
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档