本文共 4533 字,大约阅读时间需要 15 分钟。
**决定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生效 一般没有过于复杂的需求最好不要用正则表达式,会比较浪费服务器资源 具体看哪个生效转载地址:http://tfkgn.baihongyu.com/