nginx学习之静态内容篇(五)
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学习之静态内容篇(五)相关推荐
- nginx学习之详细安装篇(二)
1. 选择稳定版还是主线版 主线版:包含最新的功能和bug修复,但该版本可能会含有一些属于实验性的模块,同时可能会有新的bug,所以如果只是做测试使用,可以使用主线版. 稳定版:不包含最新的功能,但修 ...
- Webpack5学习笔记(基础篇五)—— mode之Development环境相关参数配置
在Webpack5中,mode(模式)有三种: development(开发环境模式) production(生产环境模式) none或' '(空) 在不同模式中,我们可能对于webpack.conf ...
- nginx 学习笔记(2) nginx新手入门
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
- Learning NGINX 学习NGINX Lynda课程中文字幕
Learning NGINX 中文字幕 学习NGINX 中文字幕Learning NGINX 使用业界标准的开源Web服务器NGINX建立高性能架构 除了负载均衡和HTTP缓存等额外功能之外,NGIN ...
- Nginx 学习总结(2) —— 基本配置
这是 Nginx 学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) -- 概述,这一篇会对 Nginx 的基本配置做一些总结. Nginx 配置信息主要分为六大部分: main(全局设置) ...
- Nginx使用教程(五):使用Nginx缓存之缓存静态内容
NGINX虽然已经对静态内容做过优化. 但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能. NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在 ...
- nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
文章目录 前言 一.nginx简介 1. 什么是 nginx 和可以做什么事情 2.Nginx 作为 web 服务器 3. 正向代理 4. 反向代理 5. 负载均衡 6.动静分离 二.Nginx 的安 ...
- 学习Nginx,看完这篇超详细的文章就够了
目录 本文简介 一.Nginx的基本概念 1.1.Nginx是什么? 1.2.Nginx能帮助我们做些什么? 1.3.Nginx的特性 二.Nginx的安装 2.1.环境介绍 2.2.安装Nginx ...
- 学计算机个人心得体会,学习计算机心得体会范文五篇
学习计算机心得体会范文五篇 当我们受到启发,对生活有了新的感悟时,写心得体会是一个不错的选择,这样可以记录我们的思想活动.那么写心得体会要注意的内容有什么呢?以下是小编精心整理的学习计算机心得体会范文 ...
最新文章
- 算法学习之路|数位dp简要分析
- Windows下MySQL下载安装、配置与使用
- excel表格最大行数
- python 文本处理模块_Python文本处理几种方法
- final关键字细节
- vnc连接linux使用教程_linux系统下vnc 的配置和使用方法
- Natasha 4.0 探索之路系列(三) 基本的动态编译
- 《软件工程》课之-调查问卷的心得体会
- UI设计素材干货模板|移动按钮的“悬停效果”
- 平均年薪 70 万!刚刚,这类程序员又涨薪了!佩服!
- 从程序员到项目经理(28):该死的结果导向(只看结果,不问过程到底行不行?)...
- Hdu2612Find a way bfs
- Appium-Get Clipboard(获取剪贴板)
- LVDS通信协议以及概念
- Ubuntu 下Rhythmbox播放器中文乱码解决办法
- php上传文件和下载文件,PHP 如何上传文件和下载
- gethostbyname linux,gethostbyname()
- 四个参数秒懂巴菲特价值投资
- system(“pause“);
- caffe安装详细完整过程(Ubuntu16.04、Ubuntu18.04系统)
热门文章
- 深度优先搜索算法在RPG游戏迷宫中的应用
- 值得收藏的经典网页代码(1)
- SLAM之特征匹配(一)————RANSAC-------OpenCV中findFundamentalMat函数使用的模型
- 你真的掌握了并发编程volatile synchronized么?
- Jquery和PHP Ajax JSON
- 剖析PHP中的输出缓冲
- .htaccess的重写规则
- C/C++中static关键字用法汇总
- 【FFmpeg】ffmpeg命令详解(三)高级选项
- 三菱plc232数据线驱动下载_三菱PLC与西门子PLC有什么区别?