本文共 6200 字,大约阅读时间需要 20 分钟。
aio这种逻辑一般只能在磁盘io上实现
绑定8颗cpu中的后4颗,从0开始掩码为4、0001 00005、0010 00006、0100 00007、1000 0000看哪个进程运行在哪个cpu上ps axo comm,pid,psr | grep nginxwatch -n.5 'ps axo comm,pid,psr | grep nginx'动态观测0.5秒这个命令的执行结果没有人访问,所以可能不会变化yum install -y httpd-toolsab -n 10000 -c 100 nginx的配置文件中可以按顺序绑定cpuwoker_cpu_affinity 1000 0100 0010 0001;---绑定的顺序就是3210nginx -tnginx -s reload再次运行watch命令,可以看到绑定顺序3210ps axo comm,pid,psr,ni | grep nginx
nice值默认都是0---优先级,对应的是120调整nice值从-20到19,对应优先级从100到139手动调整worker进程的优先级配置文件中:worker_priority -5;对应的优先级就是115worker_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;默认为on3、error_log file [level];---不适用rsyslog,因为信息量比较大事件驱动相关的配置event {---仍然属于主配置段...}1、worker_connections number;每个worker进程所能够打开的最大并发连接数数量---默认1024worker processes worker_connections2、use_method:指明并发连接请求的方法---两种select() 和epolluse epoll;---一般使用epoll3、accept_mutex on | off---mutex:互斥锁,意味着资源独占,释放后才能另一个用处理新的连接请求的方法;on意味着由各worker轮流处理新请求,起点公平;off:谁先拿到谁处理,意味着每个新请求的到达都会通知所有的worker进程;结果公平;http协议的相关配置:http { ......server { ...server_namerootlocation [OPERATOR] /usr/ { ...}}server { ......}}与套接字相关的配置:---指通过哪个端口来接收用户请求1、server {...}---只能用在http这个上下文中配置一个虚拟主机;server { listen address[:PORT] | PORT;server_name SERVER_NAME;root /PATH/TO/DOCUMENT_ROOT;---是web服务器时定义本地文档路径映射proxy_pass ---意味着对整个端口的请求包括无论什么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 ~^www\d+.magedu.com$---\d表示[0~9],+表示匹配至少一个字符.表示.这个字符,以www开头,至少一个数字,以com结尾匹配顺序:(1)首先是字符串精确匹配(2)左侧通配符(3)右侧通配符(4)正则表达式练习:定义四个虚拟主机,混合使用三种类型的虚拟主机;---基于ip、端口、主机名仅开放给来自本地网络中的主机访问45选项要on4、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个资源,并且保持75stypes_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 location7、location [ = | ~ | ~ | ^~ ] url {...}---用来指定url的各种访问属性的--------------59:51min不明白★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★location后边跟url会设置一个新的上下文,但是只对这一个location有效---location可以定义root,覆盖掉外边的root,如果能够匹配,才生效在一个server中location配置段可存在多个,用于实现从url到文件系统的路径映射;nginx会根据用户请求的uri来检查定义的所有location,并找出一个最佳匹配,而后应用其配置=:对URI做精确匹配,例如: ,loction = / {---等于根和是根意义不同,等于根就是根,是根表示以根起始的内容...}~:对URI做正则表达式模式匹配,区分字符大小写~:对URI做正则表达式模式匹配,不区分字符大小写^~:对URI的左半部分做匹配检查,不区分字符大小写---可以理解为不是正则表达式模式的检查机制不带符号:匹配起始于此url的所有的urlfind /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
转载于:https://blog.51cto.com/13852573/2364135