搜索
首页运维NginxNginx静态文件服务如何配置及优化

根目录和索引文件

root 指令指定将用于搜索文件的根目录。 为了获取所请求文件的路径,nginx 将请求 uri 附加到 root 指令指定的路径。该指令可以放在 http {} , server {} 或 location {} 上下文中的任何级别。在下面的示例中,为虚拟服务器定义了 root 指令。 它适用于未包含根指令的所有 location {} 块,以显式重新定义根:

server {
  root /www/data;

  location / {
  }

  location /images/ {
  }

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

在这里,nginx 针对 /images/ 开头的 uri 将在文件系统的 /www/ data/images/ 目录中搜索相应文件。 如果 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 以返回自动生成的目录列表,请在 autoindex 指令中包含 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 指令可用于检查指定的文件或目录是否存在; nginx 会进行内部重定向,如果没有,则返回指定的状态代码。例如,要检查对应于请求 uri 的文件是否存在,请使用 try_files 指令和 $uri 变量,如下所示:

server {
  root /www/data;

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

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

最后一个参数也可以是状态代码(直接以等号开头)或位置名称。 在以下示例中,如果 try_files 指令的所有参数都不会解析为现有文件或目录,则会返回 404 错误。

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

在下一个示例中,如果原始 uri 和带有附加尾部斜杠的 uri 都不会解析为现有文件或目录,则会将请求重定向到指定位置,并将其传递给代理服务器。

location / {
  try_files $uri $uri/ @backend;
}

location @backend {
  proxy_pass http://backend.example.com;
}

优化服务内容的性能

加载速度是提供任何内容的关键因素。 对 nginx 配置进行微小优化可以提高生产力并帮助实现最佳性能。

启用 sendfile

默认情况下,nginx 会自行处理文件传输,并在发送之前将文件复制到缓冲区中。 启用 sendfile 指令消除了将数据复制到缓冲区的步骤,并允许将数据从一个文件描述符直接复制到另一个文件描述符。或者,为了防止一个快速连接完全占用工作进程,可以使用 sendfile_max_chunk 指令限制单个 sendfile() 调用中传输的数据量(在本例中为1 mb):

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

}

启用 tcp_nopush

将 tcp_nopush 指令与 sendfile on; 指令一起使用。这使得 nginx 可以在 sendfile() 获取数据块之后立即在一个数据包中发送 http 响应头。

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

}

启用 tcp_nodelay

tcp_nodelay 指令允许覆盖 nagle 的算法 ,该算法最初设计用于解决慢速网络中小数据包的问题。该算法将许多小数据包合并为一个较大的数据包,并以 200 毫秒的延迟发送数据包。如今,在提供大型静态文件时,无论数据包大小如何,都可以立即发送数据。延迟也会影响在线应用程序(ssh,在线游戏,在线交易等)。默认情况下, tcp_nodelay 指令设置为 on,这意味着禁用了 nagle的算法。此指令仅用于 keepalive 连接:

location /mp3 {
  tcp_nodelay    on;
  keepalive_timeout 65;
  #...
  
}

优化积压队列

其中一个重要因素是 nginx 可以多快地处理传入连接。一般规则是在建立连接时,将其放入侦听套接字的 "listen" (监听)队列中。在正常负载下,队列很小或根本没有队列。但是在高负载下,队列会急剧增长,导致性能不均匀,连接中断,延迟增加。

显示积压队列使用命令 netstat -lan 来显示当前监听队列。输出可能如下所示,它显示在端口 80上的监听队列中,有 10 个未接受的连接,这些连接针对配置的最多 128 个排队连接。这种情况很正常。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
10/0/128    *.80    
0/0/128    *.8080

相反,在以下命令中,未接受的连接数(192)超过了 128 的限制。当网站流量很大时,这种情况很常见。要获得最佳性能,需要在操作系统和 nginx 配置中增加可以排队等待 nginx 接受的最大连接数。

current listen queue sizes (qlen/incqlen/maxqlen)
listen     local address     
0/0/128    *.12345      
192/0/128    *.80    
0/0/128    *.8080

调整操作系统

将 net.core.somaxconn 内核参数的值从其默认值(128)增加到足以容纳大量流量的值。在这个例子中,它增加到 4096。

  • freebsd 的命令为 sudo sysctl kern.ipc.somaxconn=4096

  • linux 的命令为 1. sudo sysctl -w net.core.somaxconn=4096 2. 将 net.core.somaxconn = 4096 加入到 /etc/sysctl.conf 文件中。

调整 nginx

如果将 somaxconn 内核参数设置为大于 512 的值,请将 backlog 参数增加在 nginx listen 指令以匹配修改:

server {
  listen 80 backlog=4096;
  # ...

}

以上是Nginx静态文件服务如何配置及优化的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
NGINX的目的:服务Web内容等NGINX的目的:服务Web内容等May 08, 2025 am 12:07 AM

nginxserveswebcontentandactsasareverseproxy,loadBalancer和more.1)效率高效的servesstaticContentLikeHtmlandImages.2)itfunctionsasareverseproxybalancer,and andginxenhanceperforfforfforfforfforfforffrenfcaching.4)

NGINX单元:简化应用程序部署NGINX单元:简化应用程序部署May 07, 2025 am 12:08 AM

NGINXUnit通过动态配置和多语言支持简化应用部署。1)动态配置无需重启服务器即可修改。2)支持多种编程语言,如Python、PHP、Java。3)采用异步非阻塞I/O模型,提升高并发处理性能。

NGINX的影响:Web服务器及其他NGINX的影响:Web服务器及其他May 06, 2025 am 12:05 AM

NGINX起初解决C10K问题,现已发展为处理负载均衡、反向代理和API网关的全能选手。1)它以事件驱动和非阻塞架构闻名,适合高并发。2)NGINX可作为HTTP和反向代理服务器,支持IMAP/POP3。3)其工作原理基于事件驱动和异步I/O模型,提升了性能。4)基本用法包括配置虚拟主机和负载均衡,高级用法涉及复杂负载均衡和缓存策略。5)常见错误包括配置语法错误和权限问题,调试技巧包括使用nginx-t命令和stub_status模块。6)性能优化建议包括调整worker参数、使用gzip压缩和

NGINX故障排除:诊断和解决常见错误NGINX故障排除:诊断和解决常见错误May 05, 2025 am 12:09 AM

Nginx常见错误的诊断与解决方法包括:1.查看日志文件,2.调整配置文件,3.优化性能。通过分析日志、调整超时设置和优化缓存及负载均衡,可以有效解决404、502、504等错误,提高网站稳定性和性能。

使用NGINX单元部署应用程序:指南使用NGINX单元部署应用程序:指南May 04, 2025 am 12:03 AM

nginxunitischosenfordEployingApplicationsDuetoItsflexibility flexibility,sisofuse,andability tohandledynamicApplications.1)itupportsmultProgramprogrogminglanguagesLikeLikeLikePython,php,node.js,andjava.2)

NGINX和Web托管:服务文件和管理流量NGINX和Web托管:服务文件和管理流量May 03, 2025 am 12:14 AM

NGINX可用于服务文件和管理流量。1)配置NGINX服务静态文件:定义监听端口和文件目录。2)实现负载均衡和流量管理:使用upstream模块和缓存策略优化性能。

NGINX与Apache:比较Web服务器技术NGINX与Apache:比较Web服务器技术May 02, 2025 am 12:08 AM

NGINX适合处理高并发和静态内容,Apache适用于动态内容和复杂URL重写。1.NGINX采用事件驱动模型,适合高并发。2.Apache使用进程或线程模型,适用于动态内容。3.NGINX配置简单,Apache配置复杂但更灵活。

nginx和apache:部署和配置nginx和apache:部署和配置May 01, 2025 am 12:08 AM

NGINX和Apache各有优势,选择取决于具体需求。1.NGINX适合高并发,部署简单,配置示例包括虚拟主机和反向代理。2.Apache适用于复杂配置,部署同样简单,配置示例包括虚拟主机和URL重写。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器