2-3-运维必备核心技能-nginx配置文件全面讲解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-3-运维必备核心技能-nginx配置文件全面讲解相关的知识,希望对你有一定的参考价值。
aio这种逻辑一般只能在磁盘io上实现
绑定8颗cpu中的后4颗,从0开始
掩码为
4、0001 0000
5、0010 0000
6、0100 0000
7、1000 0000
看哪个进程运行在哪个cpu上
ps axo comm,pid,psr | grep nginx
watch -n.5 ‘ps axo comm,pid,psr | grep nginx‘动态观测0.5秒这个命令的执行结果
没有人访问,所以可能不会变化
yum install -y httpd-tools
ab -n 10000 -c 100 http://172.16.0.67/index.html---进行压力测试,看有没有变化
nginx的配置文件中可以按顺序绑定cpu
woker_cpu_affinity 1000 0100 0010 0001;---绑定的顺序就是3210
nginx -t
nginx -s reload
再次运行watch命令,可以看到绑定顺序3210
ps axo comm,pid,psr,ni | grep nginx
nice值默认都是0---优先级,对应的是120
调整nice值从-20到19,对应优先级从100到139
手动调整worker进程的优先级
配置文件中:worker_priority -5;对应的优先级就是115
worker_rlimit_nofile number 65536;最大65536,但不一定打开这么多
一个进程:一个文件打开一个连接就需要维持一个套接字;一个进程worker能够响应1024个并发请求,就要维持1024个套接字,如果需要能够响应1024个并发,就需要支持能打开这么多套接字,那么nginx的用户就必须要调高他所能打开文件的套接字,至少要调到大于进程数*单个进程能打开的文件数
视频中的课件,接上一节课
3、worker_priority number:
指定worker进程的nice值,设定worker进程优先级;[-20,20]
4、worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限
调试、定位问题:
1、daemon on | off
是否以守护进程方式运行nginx;centos6需要打开,7就不需要了,因为是通过systemd方式来监控的
2、master_process on | off---如果是off就是一个进程,为了调试
是否以master/worker模型运行nginx;默认为on
3、error_log file [level];---不适用rsyslog,因为信息量比较大
事件驱动相关的配置
event {---仍然属于主配置段
...
}
1、worker_connections number;
每个worker进程所能够打开的最大并发连接数数量---默认1024
worker processes worker_connections
2、use_method:
指明并发连接请求的方法---两种select() 和epoll
use epoll;---一般使用epoll
3、accept_mutex on | off---mutex:互斥锁,意味着资源独占,释放后才能另一个用
处理新的连接请求的方法;on意味着由各worker轮流处理新请求,起点公平;off:谁先拿到谁处理,意味着每个新请求的到达都会通知所有的worker进程;结果公平;
http协议的相关配置:
http {
......
server {
...
server_name
root
location [OPERATOR] /usr/ {
...
}
}
server {
......
}
}
与套接字相关的配置:---指通过哪个端口来接收用户请求
1、server {...}---只能用在http这个上下文中
配置一个虚拟主机;
server {
listen address[:PORT] | PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;---是web服务器时定义本地文档路径映射
proxy_pass http://192.168.10.2 ---意味着对整个端口的请求包括无论什么url的所有请求都反代给这个服务器,这样root这一行就没有用了
}
2、listen PORT | address[:PORT] | unix:/PATH/TO/SOCKET_FILE---第一种:可以监听在地址上(默认端口)、第二种:在端口上(本地的所有地址),不要加冒号、第三种:unix的路径,只能通过127.0.0.1回环接口访问,不支持远程访问,这种几乎没有用
listen address[:PORT] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
default_server:设定为默认虚拟主机
ssl:限制仅能够通过ssl连接提供服务,必须通过https协议访问,强制安全通讯时必须加,通过此端口访问必须基于ssl的实现,就是443端口也要加上ssl后缀
backlog=number:后援队列长度,超过1024个以后排队能排多长
rcvbuf=size:接收缓冲区大小
sndbuf=size:发送缓冲区大小
3、server_name name...
指明虚拟主机的主机名称,后可跟多个由空白字符分隔的字符串
支持通配任意长度的任意字符;server_name .magedu.com www.magedu.
支持~起始的字符做正则表达式模式匹配;server_name ~^wwwd+.magedu.com$---d表示[0~9],+表示匹配至少一个字符.表示.这个字符,以www开头,至少一个数字,以com结尾
匹配顺序:
(1)首先是字符串精确匹配
(2)左侧通配符
(3)右侧通配符
(4)正则表达式
练习:定义四个虚拟主机,混合使用三种类型的虚拟主机;---基于ip、端口、主机名
仅开放给来自本地网络中的主机访问
45选项要on
4、tcp_nodelay on | off---保持一个连接,可能会请求多个资源,如果请求一个很小的资源攒着再发送会非常影响用户体验(一个资源只有几KB,太小了,用户感觉到达时间有延迟),一个数据包包含好几个小文件。nodelay就是请求一个发一个,仅对长连接(保持连接)有效,非保持连接开了这项也没有用
在keepalived模式下的连接是否启用TCP_NODELAY选项---只对保持连接有效
5、sendfile on | off
是否启用sendfile功能
tcp_nopush on | off---1、响应报文首部和整个文件的起始内容放在一个报文中发送2、在一个报文中发送一个文件而不是分开来发送
只有sendfile on时才有效。内核能封装传输层首部,不能封装应用层,因此开启这个选项先封装传输层再等待应用层然后一块打包发送,并且这个报文不用送往用户空间去了
在sendfile模式下,是否启用TCP_CORK选项;是否等待应用层首部合并起来一并发送
keepalive_timeout 65---保持连接的超时时间
保持连接应该有两部分的限制,包括时间跟数量,默认是可以打开100个资源,并且保持75s
types_hash max_size 2048;---基于hash码比较有没有这种类型的资源,然后把hash值装入内存,速度特别快,这里是请求多少内存空间
保存类型的hash值的最大值,单位是个
types:资源类型,内容类型,nginx内部为了加速某个资源的访问,manytypes文件是直接被装入内存的,在内存中就可以知道资源是什么类型了(每一个类型在hash以后比较)
定义路径相关的配置
6、root path---相当于document root
设置web资源路径映射:用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径;可用的位置:http(所有server都使用同一个root设定),server(可以覆盖全局设定),location,if in location
7、location [ = | ~ | ~ | ^~ ] url {...}---用来指定url的各种访问属性的--------------59:51min不明白★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
location后边跟url会设置一个新的上下文,但是只对这一个location有效---location可以定义root,覆盖掉外边的root,如果能够匹配,才生效
在一个server中location配置段可存在多个,用于实现从url到文件系统的路径映射;nginx会根据用户请求的uri来检查定义的所有location,并找出一个最佳匹配,而后应用其配置
=:对URI做精确匹配,例如:http://www.magedu.com/ ,http://www.magedu.com/index.html
loction = / {---等于根和是根意义不同,等于根就是根,是根表示以根起始的内容
...
}
~:对URI做正则表达式模式匹配,区分字符大小写
~:对URI做正则表达式模式匹配,不区分字符大小写
^~:对URI的左半部分做匹配检查,不区分字符大小写---可以理解为不是正则表达式模式的检查机制
不带符号:匹配起始于此url的所有的url
find /usr/share -iname "*.jpg" -exec cp {} ./ ---找目录中所有的jpg文件并复制到当前目录
curl http://www.ilinux.io/index.html----访问网址
匹配优先级:=,^~,~或者~*,不带符号
root ^/hosts/www/htdocs/
http://www.magedu.com/index.html-->/vhosts/www/htdocs/index.html
server {
root /vhosts/www/htdocs/
}
例子:jpg或png资源不希望172.16.0.68的访问,允许其他所有主机访问
location ~* .(jpg | png) {
deny 172.16.0.68;
allow all;
}
例子:
location /images/ {---这里定义的root是images前边的/符号,
root /data/pictures/;
}
例子:
location /images/ {---这里定义的alias是images后边的/符号,
alias /data/pictures/;
}
8、alias path:
定义路径别名,文档映射的另一种机制,仅能用于location上下文
注意:location中使用root指令和alias指令的意义不同
(a)root,给定的路径对应于location中的/url/左侧的/
(b)alias,给定的路径对应于location中的/url/右侧的/
9、index file ...---默认主页,可以定义多个,自左而右
默认资源;http,server,location
10、error_page code ...[=[response]] url
Defines the URL that will be shown for the specified errors
例子:
error page 404 /404.html;
location = /40x.html {
}
error page 500 502 503 504 /50x.html;
location = /50x.html {
}
error page 404 /notfound.html;---如果访问404错误页面,定义location(从×××自定义的网页)
location = /notfound.html {---自定义根的位置---1:20:21min
root /data/nginx/error_pages;---这个目录下存放notfound.html文件
}
error page 404 =200 /notfound.html;---如果访问404错误页面,定义location(从×××自定义的网页),修改状态码为200(404变200)
location = /notfound.html {---自定义根的位置---1:20:21min
root /data/nginx/error_pages;---这个目录下存放notfound.html文件
}
11、try_files file ... url
以上是关于2-3-运维必备核心技能-nginx配置文件全面讲解的主要内容,如果未能解决你的问题,请参考以下文章
Mysql配置和安装实战 - 1.运维必备技能-数据库原理深度讲解