根目录和索引文件
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中文网其他相关文章!

NGINX和Apache各有优劣,适合不同场景。1.NGINX适合高并发和低资源消耗场景。2.Apache适合需要复杂配置和丰富模块的场景。通过比较它们的核心特性、性能差异和最佳实践,可以帮助你选择最适合需求的服务器软件。

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

要关闭 Nginx 服务,请按以下步骤操作:确定安装类型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服务:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自动启动(可选):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

服务器无权访问所请求的资源,导致 nginx 403 错误。解决方法包括:检查文件权限。检查 .htaccess 配置。检查 nginx 配置。配置 SELinux 权限。检查防火墙规则。排除其他原因,如浏览器问题、服务器故障或其他可能的错误。

在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具