当前位置: 首页 > 编程日记 > 正文

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

相关文章:

Modeling System Behavior with Use Case(1)

Modeling System Behavior with Use case 我们分为三个部分进行介绍,主要内容包括:需求简介、Use Case Model(Use Case Diagram、Use Case Specification)、Supplimentary Specification和Glossary,这部分内容是开发过…

matlab练习程序(高斯牛顿法最优化)

计算步骤如下: 图片来自《视觉slam十四讲》6.2.2节。 下面使用书中的练习yexp(a*x^2b*xc)w这个模型验证一下,其中w为噪声,a、b、c为待解算系数。 代码如下: clear all; close all; clc;a1;b2;c1; %待求解的系数x(0:0…

和Office一起做减肥操

随着微软公司的不断开发,Microsoft Office这款大家熟悉的软件真是越来越好用。可是随着版本的更新,软件的身材却越来越“肥胖”,于是很多朋友总想知道如何给它们“减肥”?今天,我们就说一说如何为Office2003减肥吧&…

codevs——1220 数字三角形(棋盘DP)

时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解题目描述 Description如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大。 输入描述 …

Modeling System Behavior with Use Case(2)

这是Modeling System Behavior with Use Case的第二部分,本图文首先介绍Use Case Model,然后介绍Actor以及Actor之间的关系,Use Case以及Use Case之间的关系,最后介绍Actor与Use Case之间的关系。

【Python】keras卷积神经网络识别mnist

卷积神经网络的结构我随意设了一个。 结构大概是下面这个样子: 代码如下: import numpy as np from keras.preprocessing import image from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Activation from keras.…

IIS安全机制基础

IIS (Internet Information Server)作为当今流行的Web服务器之一,提供了强大的Internet和Intranet服务功能。如何加强IIS的安全机制,建立高安全性能的可靠的Web服务器,已成为网络管理的重要组成部分。 以Windows NT的安全机制为基础 …

CLion 2017 注册码

注册码使用时间2017-2018 CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb…

Modeling System Behavior with Use Case(3)

这是Modeling System Behavior with Use Case的最后一个部分,主要介绍Use Case Specification、Supplementary Specification和Glossary。今天华电时断时续停电,导致早晨所做的工作丢失,很是难过,发完这个图文,我继续代…

2019最新版本的PanDownload纯净版,网盘满速下载和搜索神器,追剧和动漫新番必不可少的下载工具【亲测有效】

PanDownload是百度网盘的第三方下载神器,它支持快速搜索功能,快速找到你想要的东西,还支持满速下载,可谓是不可多得的下载神器。 下载地址:http://t.cn/EobUOTS 城通网盘下载地址:https://u20150046.ctfi…

codevs——2894 Txx考试(背包)

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解题目描述 DescriptionTxx是一个成绩很差的人,考试便成了他的噩梦。于是他常在考试时睡觉以打发时间。今天他又要面临一次考试,为了保证有充足的睡眠,他决定只做k分钟题目。这次测…

利用Use Case为系统行为建模(1)

需求这块写了很多了,就剩下最后的三篇图文了。后面我们进入分析与设计部分。大概10月中旬,我们结束这块。开始机器学习的总结与代码实现。

LightTools( 32-64) 8.4.0下载与安装方法,lighttools免费版,lighttools(光学建模软件)【亲测有效】

对于从事光学建模的同学们来说拥有一款功能强大的光学建模软件来辅助的话那么将能提升工作效率,LightTools就是一款功能强大的光学建模软件。它是面向专业用户推出的一款能够增进光学系统设计效率的光学建模软件,该软件支持光机一体化设计,并…

百叶窗显示图片

using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data; namespace Image{ /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.…

python安装pillow模块错误

安装的一些简单步骤就不介绍了&#xff0c;可以去搜索一下&#xff0c;主要就记录下我在安装pillow这一模块遇到的问题 1&#xff1a;安装好pillow后&#xff0c;安装过程没有出错 2&#xff1a;但是在python的IDLE输入from PIL import Image出错 原因&#xff1a;pillow版本与…

利用Use Case为系统行为建模(2)

本节主要介绍Use Case Diagram部分&#xff0c;其中包括Actor以及Actor之间的关系、Use Case以及Use Case之间的关系、Actor与Use Case之间的关系。这是利用Use Case Model捕获系统行为最核心的部分。明天还有一节&#xff0c;有关于软件需求部分就全部介绍完了。

启示录:打造用户喜爱的产品【PDF清晰版】,产品经理必看书籍之一

启示录&#xff1a;打造用户喜爱的产品是一本很值得一买的启蒙书&#xff0c;在书的扉页中写着&#xff0c;“好产品具备三个基本条件&#xff1a;价值、可用性、可行性&#xff0c;三者缺一不可。产品没有价值&#xff0c;开发团队再优秀也无济于事。” 书本主要是分成了三部…

eclipse 中断言使用的设定

JAVA是从JDK1.4才开始支持断言的&#xff08;添加了关键字assert&#xff09; 选择菜单"Windows"->"Perferences"&#xff0c;在对话框中找到"Java"->"Complier"->"Compliance and Classfiles"&#xff0c;把"…

利用Use Case为系统行为建模(3)

到这篇文章为止&#xff0c;需求部分就全部介绍完了。我们回顾一下&#xff0c;需求是RUP静态结构的一个工作流&#xff0c;Rational通过需求金字塔模型来理解需求过程&#xff0c;在需求部分我们要得到用例图、用例描述、补充规约和术语表等制品。这部分我们需要理解参与者与参…

freemarker取值

获取java Map集合的值&#xff1a;${map["key"]}

flutter离线源码安装包最新版本下载地址

Flutter 是在2018 世界移动大会上发布了第一个 Beta 版本&#xff0c;Flutter 用以帮助开发者在 Android 和 iOS 两个平台&#xff0c;同时开发高质量原生应用的全新移动 UI 框架。本文提供下最新版的下载地址。 flutter1.5.8windows安装包下载地址&#xff1a;http://t.cn/EoY…

MongoDB 搭建副本集

副本集&#xff08;Replica Set&#xff09;是一组MongoDB实例组成的集群&#xff0c;由一个主&#xff08;Primary&#xff09;服务器和多个备份&#xff08;Secondary&#xff09;服务器构成。通过Replication&#xff0c;将数据的更新由Primary推送到其他实例上&#xff0c;…

dfasdfasdfas

fasdfasfasdfafd转载于:https://www.cnblogs.com/lulei/archive/2006/10/17/531694.html

原型模式(Prototype)

克隆方法是我们经常使用的一种软件开发技巧&#xff0c;记得当年给经管系做沙盘ERP时&#xff0c;需要保存每年资产负债表的数据&#xff0c;当时对这种模式不熟悉&#xff0c;导致后期的数据变化使前期数据被动改变&#xff0c;现在想想&#xff0c;还是当时学艺不精&#xff…

Piccure Plus 3.1中文汉化版,Piccure Plus 3.1破解版,模糊照片变清晰神器,让你不再害怕手抖了

目前随着手机的普及化&#xff0c;大家随时随地都可以拍照&#xff0c;但是每个人拍照的水平各不相同&#xff0c;这种时候一款能把模糊的照片变清晰&#xff0c;把模糊的图片变清晰的软件就成了比不可少的东西了。 Piccure Plus 3.1中文汉化版。Piccure是一款非常强大的照片去…

java设置缓存机制

2019独角兽企业重金招聘Python工程师标准>>> java设置缓存机制 所谓缓存&#xff0c;就是将程序或系统经常要调用的对象存在内存中&#xff0c;一遍其使用时可以快速调用&#xff0c;不必再去创建新的重复的实例。这样做可以减少系统开销&#xff0c;提高系统效率。…

Analysis and Design Overview

前面图文我们介绍了“软件工程的六个最佳实践”以及“利用Use Case为系统行为建模”&#xff0c;本次我们介绍“系统分析与设计的初步”。

你是如何快捷、高效获取新知识的?

一次&#xff0c;同学问我“Redhat平台下的服务器叫什么&#xff1f;”&#xff0c;答案无疑是“Apach”。后来&#xff0c;我想他怎么不会在 Baidu 里搜索一下答案就出来籽&#xff1f;但这可以理解&#xff0c;他不是学计算机&#xff0c;对于这样获取知识的方式他不知道是可…

微软推出Windows XP/Server 2003紧急安全补丁:修复远程桌面CVE-2019-0708漏洞

根据CVE-2019-0708“攻击者可通过RDP向目标系统远程桌面服务发送特制请求”来远程执行系统上的代码。因为不需要用户干预&#xff0c;攻击可像野火一样从计算机传播到另一台计算机&#xff0c;从而导致整个系统受到攻击。 漏洞补丁&#xff1a;Windows XP补丁下载地址 漏洞补…

es5 编写类风格的代码

分享下《JavaScript忍者秘籍》中的一种编写类风格代码的方法 JavaScript可以让我们通过原型实现继承&#xff0c;许多开发人员&#xff0c;尤其是那些有传统面向对象背景的开发人员&#xff0c;都希望将JavaScript的继承系统简化并抽象成一个他们更熟悉的系统。所以&#xff0c…