摘要:摘要: Nginx 服务静态内容
root目录指令指定用于搜索的根目录。为了获取请求文件的路径,Nginx附着请求URI到root指令指定的路径后面。指令能放置在http、server或location上下文上的任意级别。在下面的例子中,root指令定义在虚拟主机中。它应用于所有没有明确定义root指令的location块:
server {
root /www/data;
location / {
}
location /images/ {
}
location ~ .(mp3|mp4) {
root /www/media;
}
}
这里,Nginx在文件系统的/www/data/images/目录中搜索以/images/开头的URI。但只有URI以.map3或.map4扩展名结尾,Nginx在/www/media/目录搜索文件,因为它在location块中定义匹配。
如果请求以斜杠结尾,Nginx把它作为目录请求并尝试找到目录的一个index文件。Index指令定义index文件的名称(默认值是index.html)。为了继续使用例子,如果请求URI是/images/some/path/,Nginx分发请求给/www/data/images/some/path/index.html(如果存在),如果文件不存在,Nginx默认返回HTTP代码404(没有找到)。为了配置Nginx返回一个自动生成的目录清单替代,使用autoindex指令:
ocation /images/ {
autoindex on;
}
你能在index指令上列出多个文件名。Nginx按指定顺序搜索并返回第一个找到的。
location / {
index index.$geo.html index.htm index.html;
}
在这里使用$geo变量,通过geo指令设置自定义变量。变量的值依赖于客户端IP地址。为了范围index文件,Nginx检查它的存在性,然后通过附着index文件名到基础URI后面产生一个内部重定向URI。内部重定向导致重新搜索location。
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映射到第二个location。因此,请求被代理。
2 Trying Several Optionstry_files指令能用于检查是否指定文件或目录存在并产生一个内部重定向,如果不存在返回指定的状态码。例如:server {
root /www/data;
location /images/ {
try_files $uri /images/default.gif;
}
}
文件指定为URI格式,使用root或alias指令设置在当前location或虚拟主机上下文中处理。在这种情况下,如果文件相应的原始URI不存在,Nginx使用最后一个参数产生一个内部重定向URI,返回/www/data/images/default.gif。最后一个参数也可以是一个状态码(直接在等于号后面)或location的名字。在下面的例子中,如果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;
}
3 优化Nginx内容服务速度加载速度是服务任意内容的关键因素。NGINX局部优化配置可能促进生产力和帮助达到最佳性能。
3.1 启用sendfile默认,Nginx自己处理文件传输,发送文件前先复制到缓存。启用sendfile指令将消除复制文件到缓存的步骤和启用直接从一个文件描述符复制数据到另一个。或者,抑制一个快速连接为完全占有worker进程,你可以使用sendfile_max_chunk指令限制单个sendfile()调用传输的数据量:
location /mp3 {
sendfile on;
sendfile_max_chunk 1m;
...
}
3.2 启用tcp_onpush使用tcp_nopush选项联合sendfile on;。选项将让Nginx在通过sendfile获取数据块之后在一个包中发送HTTP响应头。
location /mp3 {
sendfile on;
tcp_nopush on;
...
}
3.3 启用tcp_nodelaytcp_nodelay选项允许覆盖纳吉尔算法,最初设计为解决在网络缓慢下使用小包哦的问题。算法整合大量小包为一个大包,发包有200ms延迟。现今,服务大静态文件时,无论包大小数据都能立即发送。延迟也会影响在线应用(ssh、在线游戏、在线交易)。默认,tcp_nodelay指令设置为on表示纳吉尔算法被禁用。选项只用于keepalive连接:
ocation /mp3 {
tcp_nodelay on;
keepalive_timeout 65;
...
}
3.4 优化积压队列Nginx能快速处理传入请求的主要因素之一。总的原则是建立连接,放入“监听”套接字队列。在正常负载下,有较少队列,或者没有队列。但在高负载下,队列可以大幅度增长导致不均匀性能,连接丢失和延迟。
3.4.1 监测监听队列让我们检测当前监听队列。运行以下命令:
netstat -Lan
命令输出以下内容:
Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
0/0/128 *.12345
10/0/128 *.80
0/0/128 *.8080
命令输出显示,有10个未接收的连接在80端口监听队列,而连接限制是128个连接,这种情况是正常的。
然而,命令输出以下内容:
Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
0/0/128 *.12345
192/0/128 *.80
0/0/128 *.8080
命令输出显示192未接收连接,超过128个连接限制。当网站繁忙时这是很常见的。为了获得更高的性能你需要增加最大连接数,需要修改你的操作系统和Nginx配置文件。
3.4.2 调优操作系统增加net.core.somaxconn键的值(默认值为128)到足够处理高并发的值:
FreeBSD
sudo sysctl kern.ipc.somaxconn=4096
Linux
sudo sysctl -w net.core.somaxconn=4096
打开文件:/etc/sysctl.conf
vim /etc/sysctl.conf
添加以下内容到文件并保存文件:
net.core.somaxconn = 4096
3.4.3 调优Nginx如果你设置somaxconn键的值大于512,改变Nginx listen指令的backlog参数为:
listen 80 backlog 4096;
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28