博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx学习之静态内容篇(五)
阅读量:6502 次
发布时间:2019-06-24

本文共 3787 字,大约阅读时间需要 12 分钟。

1.根目录和索引文件

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

root指令能放置的位置是:http,server,location。

上面的意思是:我所有的location定义都是基于根目录/www/data的,也就是说"/"指的就是/www/data/,而"/images/"指的就是/www/data/images/。

我们可以为每个目录都定义一个索引文件,默认是index.html。

index指令的值:可以是index.html或者index.htm,或者index.php。

如果我们的URI是/images/some/path,那么nginx返回的文件就是/www/data/images/some/path/index.html。当然,前提是这个index.html得存在,否则返回404错误。

 

假如我访问/images/some/path这个URI时,我希望在网页上展示的是列表,需要使用指令autoindex:会展示/www/data/images/some/path/目录下的所有文件夹和文件。

location /images/ {    autoindex on;}

 

可以在index指令后添加多个索引文件,nginx会按顺序查找,找到哪个就使用哪个:

location / {    root html;    index index.html index.php index.htm index.$geo.html;}

$geo是一个用geo指令设置的自定义变量,这个变量的值取决于客户端的IP地址。

 

index.php文件的重定向:

location / {    root /data;    index index.html index.php;}location ~ \.php {    fastcgi_pass localhost:8000;    ...}

 

2.尝试多个选项

try_files用于提供备选方案,当用户请求的URI不存在时,给予用户一个备选的方案。

server {    root /www/data;    location /images/ {        try_files $uri /images/default.gif;    }}

我们的URI是/images/aa.png,匹配到location之后,首先尝试去查找/www/data/images/aa.png文件,发现没有,此时nginx就会将/www/data/images/default.gif文件

返回给用户。

(问题:我的浏览器显示的是www.example.com/images/aa.png,但实际上看到的文件却是www.example.com/images/default.gif,目前不知道原因)。

还有一点要注意:我们的替换方法(比如上面的/images/default.gif)一定要在root的范围内,也就是/www/data目录下寻找,你不能写成其他的

 

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

如果匹配完所有的内容,都没能找到,就返回404错误。注意,如果你不明确指定404错误,那么nginx会返回500内部服务器错误的字样。

 

返回指定的错误页面:

error_page 404 /404.html;location = /404.html {    root html;}

 

重定向到命名location所代表的后端服务器:

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

当前面的$uri,$uri/都匹配不上时,就交给@backend所代表的http://backend.example.com去处理。

这里可以查看nginx的Content Caching(https://www.nginx.com/resources/webinars/content-caching-nginx-plus/),看它如何戏剧性地提高站点的性能,同时深入

理解Nginx的缓存功能

 

3.优化Nginx提供内容的速度

对nginx的配置做少许的修改,就能提高nginx的性能。

(1)开启sendfile

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

如果不开启sendfile,nginx会自己处理文件的传输,在发送数据之前,会将数据拷贝到buffer区域。

如果开启sendfile,就会省略拷贝到buffer区域的步骤,而是会直接从一个文件描述符拷贝到另一个文件描述符。

如果一个连接传输数据很快,那么它会一个人霸占一个工作进程,那么可以限制sendfile()方法每次传输的数据量大小,那么可以定义sendfile_max_chunk指令,从而限制每

个连接中最大可以传输的数据量。

 

(2)开启tcp_nopush

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

tcp_nopush需要和sendfile一起使用,它的作用是:让HTTP响应头sendfile()发送的数据混合为一个数据包发送出去。

 

(3)开启tcp_nodelay

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

这个选项用于覆盖Nagle's算法。

Nagle's算法原本的作用是:用于解决在缓慢的网络中传输很小的数据包问题。它的做法是在200ms的延迟时间内,将多个小的数据包组合为一个大的数据包,然后发出去

当nginx提供大的静态文件时,它不管文件大小,都是立即发送出去。

delay会影响在线应用程序,比如ssh,在线游戏,在线交易。

tcp_nodely设置为on,表示关闭Nagle's算法。

必须开启keepalive,才能使用这个指令,否则不能使用

 

(4)优化Backlog Queue

有一个重要的因素是:Nginx处理incoming connections时,有多快

监听套接字的监听队列:listen socket的"listen" queue

一般规则是:当一个连接建立后,它就会被放入这个"listen" queue中去

在正常情况下,要么是低队列,要么根本就没有队列

但是在高负载情况下,这个队列就会很高,可能会造成不稳定的性能、可能会丢弃连接,可能会出现延时。

 

- 测量"listen" queue的长度

netstat -Lan   (这个命令可能不对,但重要的是下面的结果)

Current listen queue sizes (qlen/incqlen/maxqlen)Listen         Local Address         0/0/128        *.12345            10/0/128        *.80       0/0/128        *.8080

我们看端口80的listen queue,队列中目前有10个未接受的连接,这个队列的最大长度是128,也就是可以有128个连接在队列中。这是正常的结果。

 

如果出现的是下面的结果:

Current listen queue sizes (qlen/incqlen/maxqlen)Listen         Local Address         0/0/128        *.12345            192/0/128        *.80       0/0/128        *.8080

我们看到192超出了最大限制,这在网站繁忙时很容易看到。

我们需要做一些调整,允许更多的连接来排队。从2个层面来调整,一个是操作系统,一个是nginx自身。

 

首先是调整操作系统:

sysctl -w net.core.somaxconn=4096

这里的somaxconn指的是socket max connections,指的是监听套接字的最大连接数。

vim /etc/sysctl

net.core.somaxconn = 4096

 

然后是调整nginx:

server {    listen 80 backlog 4096;    # The rest of server configuration}

转载于:https://www.cnblogs.com/t-road/p/6738888.html

你可能感兴趣的文章
图片拼接器
查看>>
C++ TinyXml操作(含源码下载)
查看>>
读取swf里所有类定义
查看>>
DOWNLOAD 文件
查看>>
黄聪:wordpress博客用Slimbox2实现lightbox效果(免插件)(转)
查看>>
rp2833 网卡以及串口与接插件位置关系
查看>>
ogre场景图与场景内容分离
查看>>
《分析服务从入门到精通读书笔记》第一章、代理键和渐变维度(5)
查看>>
ArchLinux安装笔记(续)(桌面篇)
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>
python设置windows桌面壁纸
查看>>
Visual Studio 11 Beta新特性(一):安装VS11
查看>>
通信常用概念
查看>>
PreferenceFragment 使用 小结
查看>>
FreeBinary 格式说明
查看>>
oracle相关链接
查看>>
有关奇葩的mex编程时的matlab出现栈内存错误的问题
查看>>
探索 | 容器存储有哪些问题和机遇?
查看>>
使用Spring Cloud和Docker构建微服务
查看>>