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

nginx学习之静态内容篇(五)相关推荐

  1. nginx学习之详细安装篇(二)

    1. 选择稳定版还是主线版 主线版:包含最新的功能和bug修复,但该版本可能会含有一些属于实验性的模块,同时可能会有新的bug,所以如果只是做测试使用,可以使用主线版. 稳定版:不包含最新的功能,但修 ...

  2. Webpack5学习笔记(基础篇五)—— mode之Development环境相关参数配置

    在Webpack5中,mode(模式)有三种: development(开发环境模式) production(生产环境模式) none或' '(空) 在不同模式中,我们可能对于webpack.conf ...

  3. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  4. Learning NGINX 学习NGINX Lynda课程中文字幕

    Learning NGINX 中文字幕 学习NGINX 中文字幕Learning NGINX 使用业界标准的开源Web服务器NGINX建立高性能架构 除了负载均衡和HTTP缓存等额外功能之外,NGIN ...

  5. Nginx 学习总结(2) —— 基本配置

    这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) -- 概述,这一篇会对 Nginx 的基本配置做一些总结. Nginx 配置信息主要分为六大部分: main(全局设置) ...

  6. Nginx使用教程(五):使用Nginx缓存之缓存静态内容

    NGINX虽然已经对静态内容做过优化. 但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能. NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在 ...

  7. nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全

    文章目录 前言 一.nginx简介 1. 什么是 nginx 和可以做什么事情 2.Nginx 作为 web 服务器 3. 正向代理 4. 反向代理 5. 负载均衡 6.动静分离 二.Nginx 的安 ...

  8. 学习Nginx,看完这篇超详细的文章就够了

    目录 本文简介 一.Nginx的基本概念 1.1.Nginx是什么? 1.2.Nginx能帮助我们做些什么? 1.3.Nginx的特性 二.Nginx的安装 2.1.环境介绍 2.2.安装Nginx ...

  9. 学计算机个人心得体会,学习计算机心得体会范文五篇

    学习计算机心得体会范文五篇 当我们受到启发,对生活有了新的感悟时,写心得体会是一个不错的选择,这样可以记录我们的思想活动.那么写心得体会要注意的内容有什么呢?以下是小编精心整理的学习计算机心得体会范文 ...

最新文章

  1. 算法学习之路|数位dp简要分析
  2. Windows下MySQL下载安装、配置与使用
  3. excel表格最大行数
  4. python 文本处理模块_Python文本处理几种方法
  5. final关键字细节
  6. vnc连接linux使用教程_linux系统下vnc 的配置和使用方法
  7. Natasha 4.0 探索之路系列(三) 基本的动态编译
  8. 《软件工程》课之-调查问卷的心得体会
  9. UI设计素材干货模板|移动按钮的“悬停效果”
  10. 平均年薪 70 万!刚刚,这类程序员又涨薪了!佩服!
  11. 从程序员到项目经理(28):该死的结果导向(只看结果,不问过程到底行不行?)...
  12. Hdu2612Find a way bfs
  13. Appium-Get Clipboard(获取剪贴板)
  14. LVDS通信协议以及概念
  15. Ubuntu 下Rhythmbox播放器中文乱码解决办法
  16. php上传文件和下载文件,PHP 如何上传文件和下载
  17. gethostbyname linux,gethostbyname()
  18. 四个参数秒懂巴菲特价值投资
  19. system(“pause“);
  20. caffe安装详细完整过程(Ubuntu16.04、Ubuntu18.04系统)

热门文章

  1. 深度优先搜索算法在RPG游戏迷宫中的应用
  2. 值得收藏的经典网页代码(1)
  3. SLAM之特征匹配(一)————RANSAC-------OpenCV中findFundamentalMat函数使用的模型
  4. 你真的掌握了并发编程volatile synchronized么?
  5. Jquery和PHP Ajax JSON
  6. 剖析PHP中的输出缓冲
  7. .htaccess的重写规则
  8. C/C++中static关键字用法汇总
  9. 【FFmpeg】ffmpeg命令详解(三)高级选项
  10. 三菱plc232数据线驱动下载_三菱PLC与西门子PLC有什么区别?