【Nginx 入门】7、静态文件服务

时间:2025-05-11 22:43:30

【Nginx 入门】静态文件服务


系列文章目录

【Nginx 入门】1、Nginx 简介
【Nginx 入门】2、Nginx 安装与基本配置
【Nginx 入门】3、Nginx 基本命令
【Nginx 入门】4、Nginx 配置语法
【Nginx 入门】5、Nginx 处理请求的流程
【Nginx 入门】6、Nginx 反向代理
【Nginx 入门】7、静态文件服务(本文)
【Nginx 入门】8、Nginx 日志管理


Nginx 在处理静态文件(如 HTML、CSS、JavaScript 和图像文件)时非常高效。它可以直接从文件系统中读取静态文件并返回给客户端,而不需要经过复杂的处理流程。在本章中,我们将详细介绍如何使用 Nginx 配置和优化静态文件服务。

1. 配置静态文件服务

1.1 基本配置

下面是一个基本的 Nginx 配置示例,用于提供静态文件服务:

server {
    listen 80;
    server_name ;

    root /usr/share/nginx/html;
    index  ;

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

在这个配置中:

  • listen 80;:Nginx 监听 80 端口。
  • server_name ;:配置虚拟主机。
  • root /usr/share/nginx/html;:指定站点的根目录。
  • index ;:定义默认的首页文件。
  • location /:匹配所有 URI,使用 try_files 指令查找文件,如果找不到则返回 404 错误。

1.2 处理特定文件类型

你可以为特定的文件类型配置不同的处理方式。例如,为图像文件设置单独的目录:

server {
    listen 80;
    server_name ;

    root /usr/share/nginx/html;
    index  ;

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

    location /images/ {
        root /data;
    }
}

在这个配置中,Nginx 将 /images/ 路径映射到 /data 目录。

2. 优化静态文件服务

2.1 启用 Gzip 压缩

启用 Gzip 压缩可以减少传输的数据量,提高页面加载速度。下面是一个配置示例:

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;
    gzip_comp_level 5;
}

在这个配置中:

  • gzip on;:启用 Gzip 压缩。
  • gzip_types:指定需要压缩的 MIME 类型。
  • gzip_min_length:设置启用压缩的最小数据长度。
  • gzip_comp_level:设置 Gzip 压缩级别,范围是 1 到 9,数字越大压缩比越高,但消耗的 CPU 资源也越多。

2.2 设置缓存头

为静态文件设置缓存头可以减少重复请求,提高性能。下面是一个配置示例:

server {
    listen 80;
    server_name ;

    root /usr/share/nginx/html;
    index  ;

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

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

在这个配置中:

  • location ~* \.(jpg|jpeg|png|gif|ico|css|js)$:匹配常见的静态文件类型。
  • expires 30d;:设置缓存时间为 30 天。
  • add_header Cache-Control "public, no-transform";:添加缓存控制头。

2.3 使用 sendfile 指令

Nginx 提供了 sendfile 指令,可以直接从文件系统读取文件并发送给客户端,提高文件传输效率:

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

在这个配置中:

  • sendfile on;:启用高效文件传输模式。
  • tcp_nopush on;tcp_nodelay on;:优化 TCP 传输。

3. 示例配置

下面是一个完整的 Nginx 配置示例,展示了如何配置和优化静态文件服务:

server {
    listen 80;
    server_name ;

    root /usr/share/nginx/html;
    index  ;

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

    location /images/ {
        root /data;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;
    gzip_comp_level 5;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}

在这个示例中:

  • 配置了基本的静态文件服务。
  • 为图像文件设置了单独的目录。
  • 启用了 Gzip 压缩和缓存头。
  • 启用了高效文件传输模式 sendfile

4. 常用指令

root

指定站点的根目录。例如:

root /usr/share/nginx/html;

index

指定默认的首页文件。例如:

index  ;

try_files

按照顺序匹配文件路径,找不到则返回错误。例如:

try_files $uri $uri/ =404;

expires

设置缓存时间。例如:

expires 30d;

add_header

添加 HTTP 响应头。例如:

add_header Cache-Control "public, no-transform";

sendfile

启用高效文件传输模式。例如:

sendfile on;

gzip

启用 Gzip 压缩。例如:

gzip on;

gzip_types

指定需要压缩的 MIME 类型。例如:

gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

5. 总结

在本章中,我们详细介绍了如何使用 Nginx 配置和优化静态文件服务。通过这些配置,你可以高效地提供静态文件,提高网站的性能和用户体验。在接下来的教程中,我们将探讨 Nginx 的日志管理,敬请期待!