**决定worker进程数量,默认是auto,对应cpu内核个数,过多的worker可能涉及到一个上下文切换的问题,当用户访问nginx服务,如果有一个worker提供服务了,下次再访问的时候,可能访问的是另外一个worker进程,这样就有可能带来一个worker的上下文切换,进程之前可以共享资源但是无法共享数据的,比如session信息,利用IO多路复用,就可以一个worker为多个用户提供服务
**
绑定cpu,可以把一个worker,绑定在一个具体的cpu内核上去,这样就可以提高缓存命中率,因为cpu里面也有缓存,如果你的worker是始终和一颗cpu结合在一起,这样cpu里的缓存就可以让worker不断地去重复使用
跑来跑去,原来你worker的缓存就有可能失效,不绑定的话,由此大大提高性能
改回2
现在有4个cpu,怎么知道哪个进程工作哪个cpu上
-o选项可以选择,显示项,cpu是psr
总共有4个cpu,现在工作在1和2上面
触发一下用ab命令
0.5秒扫一次
现在仍然是12
用ab命令
改变了,现在看来worker进程并没有固定到某个cpu上的,如果想利用缓存的话,就尽可能需要把某一个worker进程,和cpu绑在一起,这样worker进程始终运行在一颗cpu上,就可以重复利用
affinity 亲近
代表123,上一位
worker进程绑定在,1,2,3,4颗cpu上
现在试着绑定下worker
第二颗,和第三颗
重新加载一下
现在就绑定了
现在处罚一下,是否还会改变吗
现在不变了,始终是一样的
这边的1是相当于2
7相当于第8个cpu
worker进程优先级
优先级也可以看,nice
默认优先级是0
也可以指定-20到+20(nice值,是-20到19)
已经是-10了,说明确实是nice优先级的值
试试写个20
实际上认为写20就认为是19
改成19结果就也是19
官方文档写的就是-20到20
写成190,还是19,语法认为是对的
worker进程能够打开的文件个数
通常来讲需要加以设置,默认没有设置
将来希望你的worker进程支持多少个用户并发
event实际上是驱动的意思在nginx用的是epoll模型,所以配置文件里有相关的,worker的链接数的限制
这个也是和打开的文件数相关的
这个1024数字有些偏小了,如果是两个worker就15000左右
这个数字也可以适当调大,这两个数字是相对应的
65536是个总值,用户打开的数量就需要设定固定的值,每个进程的连接数乘起来就是最大并发数量
默认用哪种方法,一般用epoll就可以了,没有必要去选一个select,因为nginx优势就在于epoll上面
accept_mutex 接收,必须在event语句块,如果这项是启用的,worker进程间接收新的链接
是轮流(by turn)的,第一个请求第一个worker处理,第二个请求给第二个worker来处理
所有的进程将被通知,如果设置成off,新的链接将会由某一个worker进程来提供服务
惊群,就是来一个请求就都唤醒,但是只是给一个worker来响应,这样就没有必要,影响服务器性能
用于调试定位的一些选项
守护进程就是前台执行还是后台执行
必须放在main语句块里
作用是:是否变成守护进程,主要用于开发测试环境使用,默认是on
重新加载
再关闭
再次启动,以前一般是后台执行,现在变成了前台执行
这样就很方便 。ctrl+c结束,然后修改配置文件
然后再去跑一下,省的重新加载跑来跑去了,适合测试环境
是否以master、worker的模型运行nginx,有master进程,worker进程,off就是没有worker进程了
只有一个nginx进程了
这样表现为独立的进程,没有worker进程
定义错误日志,记录的就是nginx出现的错误信息
语法错误,应该是里面有一些相应的记录
错误日志不仅可以就在文件中,还可以记录在远程日志服务器上
可以把对应的日志发送到对应的服务器上去,还可以定义日志的级别,到底什么日志才记录
关键看看http服务相关的配置
http核心模块,叫core
root类似documentroot指定网站的家目录路径
nginx搭建网站是以server语句块来搭建的
写server一定是放在http语句块里的
定义另外一个httpserver,可以放在server里也可以放在include里
default_server 因为nginx也支持虚拟主机,去访问的时候就是默认的
server_name 网站的名字
root 存放主页的路径
如果40多个主机放在一起,那这个文件就太啰唆了。可以放在.conf里*
也可以直接创建个文件夹,放在里面,每个网站建立一个conf文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/
只少有三条,监听地址,名字,root,监听地址格式
servername必须放在server语句块里
root可以放的位置比较多
可以多个网站放在一起,但是这样比较乱,
为了管理起来更加清晰,建议一个网站单独放在一个配置文件里
前台测试执行方便,想要关闭就ctrl+c
客户端上加载名字解析
还没有放网页
b需要指定8080端口
通过ip访问访问 的是默认的网页
这个是默认的
删除掉,才重启服务
按照字母再前,a就成默认的 了
现在访问还是没有变化的
现在对c.com配置文件进行修改
现在就变成c是默认的了
http并发量过大,如何知道并发量过大,
之前设置了每个worker支持多少个并发
后援队列,就比如商场吃饭排队后面的小板凳
当用户发起请求也是先放到缓冲区里面,缓冲区可以设置成一个大小
刚才是根据主机头来设置虚拟主机
servername强大在支持通配符,甚至支持正则表达式
先把名字解析取消
为什么会返回c.com
因为前面的C。com是默认的
可以写成*
代表以a.com结尾的网站都由他处理
dns如果可以解析到,就接收处理你的请求到a.com
甚至支持正则表达式
\d表示某个数字(正则表达式中的一种写法)+(一个以上,至少一个).(转义)magedu.com$(结尾)
虚拟主机多,但是用户发请求到底谁区响应,就按照匹配的优先级
(正则表达式最好不要用,因为要进行计算,消耗服务器资源)
当用户发请求到网站,如果启用keepalive(用户发请求过来,不会立即就断开)可以继续地发多个请求过来
off代表好几个请求发过来,先等等,万一还有请求发过来,攒一起回应(延迟发送对服务器有好处,性能节约,但是用户感觉就慢了)
on不延迟发送,来一个就马上回应
sendfile在apache的时候讲过,好处就是,数据报文从磁盘读入到内核,以前是需要复制到应用程序的内存空间(然后再发送出去的时候,又要经过内核,因为通过内核才能结合网卡发送出去,所以需要传回到的内核空间,有一个socket和网络相关的缓存,这样无形中就白跑一圈)
senfile是直接把磁盘数据复制到内核空间,然后内核空间直接把数据复制到内核里关于buffer的socket文件的缓冲区,传出去
server_tokens 就是显示服务器的nginx版本
这个就很不安全
默认是持久链接的keep-alive
http,server都可以设置,如果几个网站都不想暴露,那就在http语句块设置就可以了
修改主配置文件里就可以了
可以自定义字符串只有商业版才支持
京东就显示地是商业版的
我们改改源码也可以做到
程序员只管两三台机器之间测出功能,可以实现就可以了
在一些高并发的情况下的,可能代码就错了
root就是所谓的网站路径
咋sitea下面建立一个子文件夹叫sports
默认情况下,是和apache一样的,你建立一个网站的主目录建立一个子文件夹,将来访问这个子文件夹还可以得到你的页面,目前访问网站的时候,这个文件夹目前是主站点下的真的文件夹,那么不用真实文件夹,创建一个软链接,
现在就可以访问了
location可以来定义某个位置,针对某个位置来单独地做处理
可以放到server块和location(location嵌套)
主要功能就是针对某个具体的路径来定义响应的规则的
root之前是放在server语句块中的,实际上也可以放到location里
所以可以修改配置文件
代表针对跟/来进行一些设置
没有影响
修改成这样
这个news是url路径,还是访问这个文件夹下的news
但是可以进行分开
修改成这样
现在设置的两个root各不相同
少了一个分号
现在访问news子文件夹的时候,访问的最终数据哪个文件夹里的
是app/sitea下的news
不访问news就还是原来的目录
**这样带来的好处就是针对特定的文件夹
(news目录(这个不是文件夹,是URL)和app/sitea目录的关系是
当用户取访问这个news的url的时候,就把请求转发到app/sitea下的news里面
就代表/news,跟/代表app/sitea
**
可以加一些符号
=就代表精确匹配
如果访问www.a.com是访问哪个文件夹呢
代表location的级别比root高一点
如果加了一个等号
z这样设置就无效了
现在把上面的root去掉
现在访问nginx默认页面取了
如果这样设置,好像精确匹配没有起作用,匹配到默认站点去了
看来是没有匹配成功
修改成一个精确a.com
还是匹配不到
现在修改精确的写法,或者可能文档也写错了
语法没错,现在执行
现在就是精确匹配了
默认访问的就是/index.html。所以精确匹配到了站点
但是访问别的路径
先创建一个文件
启动起来访问一下test
找不到的原因是因为现在是精确匹配,访问test.html就找不到了
现在把root启用
找不到是因为在root下根本没有tesst文件,创建一个页面
只有精确匹配这个路径的时候才访问它,不匹配就访问跟
不写就认为是找index.html
还可以支持其他的比较
loction符号加在一起,如果都冲突的话,会有个先后顺序
=,精确匹配
^~,对url最左边做匹配,不区分大小写
~/,对url做正则表达式,区分大小写
~*,对url做正则表达式,不区分大小写
没有符号
当用户去访问,某个地址,如何去匹配
如果是/的请求,如www.a.com就是匹配A,B(也是包含的,代表访问主站点的时候,认为哪些有效的,但是AB都匹配)
根据优先级是A精确匹配优先级高,直接生效
如果访问的是document.html,就C生效,匹配的更多谁生效
images/1.gif,就需要D生效(B.D.E都匹配,按照符号匹配优先级)D最高就生效
document/1.jpg,B,C都匹配,E也匹配,之前的都是不带符号,不带符号的不如带符号的优先级高所以E生效
一般没有过于复杂的需求最好不要用正则表达式,会比较浪费服务器资源
具体看哪个生效