快捷搜索:

[高性能WEB服务NGINX部分]

---------------------[高性能WEB服务NGINX部分]--------------------- >1. ngx_http_core_module模块: 定义位置路径-root(/默认) 设置web资源的路径映射;用于指明请求的URL所对应的文档的目录路径,可用于http, server, location, if in location 匹配优先级从高到低:=, ^~, ~/~*, 不带符号 示例: server { location /admin/ { root /webapps/app1/data/; } } http://www.magedu.com/admin/index.html --> /webapps/app1/data/admin/index.html

>2. ngx_http_core_module模块: 定义路径别名-alias(路径别名) 路径别名,文档映射的另一种机制;仅能用于location上下文 示例: http://www.magedu.com/bbs/index.html location /bbs { alias /web/forum/; } --> /web/forum/index.html 注意: /bbs 后建议不要加 /

location /bbs/ { root /web/forum/; } --> /web/forum/bbs/index.html 注意:location中使用root指令和alias指令的意义不同 (a) root,给定的路径对应于location中的/uri 左侧的/ (b) alias,给定的路径对应于location中的/uri 的完整路径

server { ... server_name HOSTNAME; location /uri/ { proxy_pass http://host[:port]/; 注意: 最后有/ } ... } 上面示例:http://HOSTNAME/uri --> http://host/ 即置换.

2、如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须不能使用自己的uri; 用户请求时传递的uri将直接附加至后端服务器之后 server { ... server_name HOSTNAME; location ~|~* /uri/ { proxy_pass http://host; 注意: 不能加/ } ... } 上面示例:http://HOSTNAME/uri/ --> http://host/uri/

>4. ngx_http_core_module模块:客户端网络传输速率限制. limit_rate rate; 限制响应给客户端的传输速率,单位是bytes/second, 默认值0表示无限制. limit_except method ... { ... },仅用于location, 限制客户端使用除了指定的请求方法之外的其它方法 method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET { allow 192.168.1.0/24; deny all; } 除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使

>5. ngx_http_access_module模块: 基于IP的访问控制功能. 1、allow address | CIDR | unix: | all; 2、deny address | CIDR | unix: | all; http, server, location, limit_except 自上而下检查,一旦匹配,将生效,条件严格的置前 示例: location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; }

>6. ngx_http_auth_basic_module模块: 使用basic机制基于用户的访问控制(文件服务器) 实现基于用户的访问控制,使用basic机制进行用户认证 1、auth_basic string | off; 2、auth_basic_user_file file; location /admin/ { auth_basic "Admin Area"; auth_basic_user_file /etc/nginx/.ngxpasswd; } 用户口令文件: 1、明文文本:格式name:password:comment 2、加密文本:由htpasswd命令实现, httpd-tools所提供

>7. ngx_http_stub_status_module模块: 输出nginx的基本状态信息 示例: location /status { stub_status; allow 172.16.0.0/16; deny all; }

>8. ngx_http_ssl_module模块:证书绑定功能 1、ssl on | off; 为指定虚拟机启用HTTPS protocol, 建议用listen指令代替 (新版本必须使用listen www.xxx.com.cn ssl) 2、ssl_certificate file; 当前虚拟主机使用PEM格式的证书文件 3、ssl_certificate_key file; 当前虚拟主机上与其证书匹配的私钥文件 4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];支持ssl协议版本,默认为后三个 5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; none: 通知客户端支持ssl session cache,但实际不支持 builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有 [shared:name:size]:在各worker之间使用一个共享的缓存 6、ssl_session_timeout time; 客户端连接可以复用ssl session cache中缓存的有效时长,默认5m

示例: server { listen 443 ssl; server_name www.magedu.com; root /vhosts/ssl/htdocs; # ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; }

>9. ngx_http_rewrite_module模块:请求重定向 rewrite regex replacement [flag]

>10. ngx_http_referer_module模块:防盗链 valid_referers none|blocked|server_names|string ...;

>11. ngx_http_upstream_module模块: 负载均衡服务器 用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用 1、upstream name { ... } 定义后端服务器组,会引入一个新的上下文,默认调度算法是wrr http { upstream httpdsrvs { server ... server... ... } }

2、server address [parameters]; IP[:PORT] HOSTNAME[:PORT] parameters: weight=number 权重,默认为1 max_conns 连接后端报务器最大并发活动连接数,1.11.5后支持 max_fails=number 失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用,默认为1 fail_timeout=time 后端服务器标记为不可用状态的连接超时时长,默认10s backup 将服务器标记为“备用”,即所有服务器均不可用时才启用 down 标记为“不可用”,实现灰度发布

3、ip_hash 源地址hash调度方法 4、least_conn 最少连接调度算法,当server拥有不同的权重时其为wlc,当所有后端主机连接数相同时,则使用wrr,适用于长连接 5、hash key [consistent] 基于指定的key的hash表来实现对请求的调度 作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器 hash $request_uri consistent; hash $remote_addr; 6、health_check [parameters];健康状态检测机制;只能用于location上下文 interval=time检测的频率,默认为5秒 fails=number:判定服务器不可用的失败检测次数;默认为1次 passes=number:判定服务器可用的失败检测次数;默认为1次 uri=uri:做健康状态检测测试的目标uri;默认为/ ******match=NAME:健康状态检测的结果评估调用此处指定的match配置块****** / 注意:仅对nginx plus有效 实例1 stream { upstream mysqlsrvs { server 192.168.22.2:3306; server 192.168.22.3:3306; least_conn; } 实例2 stream { upstream mysqlsrvs { server 192.168.0.10:3306; server 192.168.0.11:3306; hash $remote_addr consistent; } 实例3 stream { upstream mysqlsrvs { server 192.168.0.10:3306; server 192.168.0.11:3306; hash $remote_addr consistent; } server { listen 172.16.100.100:3306; proxy_pass mysqlsrvs; proxy_timeout 60s; proxy_connect_timeout 10s; } }

>12. 实现Nginx高并发Linux内核优化 使Nginx支持更多并发请求, 修改/etc/sysctl.conf来更改内核参数

fs.file-max = 999999 表示单个进程较大可以打开的句柄数 net.ipv4.tcp_tw_reuse = 1 参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在 net.ipv4.tcp_keepalive_time = 600 当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可更快的清理无效链接 net.ipv4.tcp_fin_timeout = 30 当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的较大时间 net.ipv4.tcp_max_tw_buckets = 5000 这个参数表示操作系统允许TIME_WAIT套接字数量的较大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为8000,过多的TIME_WAIT套接字会使Web服务器变慢 net.ipv4.ip_local_port_range = 1024 65000 定义UDP和TCP链接的本地端口的取值范围 net.ipv4.tcp_rmem = 10240 87380 12582912 定义了TCP接受缓存的最小值、默认值、较大值 net.ipv4.tcp_wmem = 10240 87380 12582912 定义TCP发送缓存的最小值、默认值、较大值 net.core.netdev_max_backlog = 8096 当网卡接收数据包的速度大于内核处理速度时,会有一个列队保存这些数据包。这个参数表示该列队的较大值

注意:以下的四个参数,需要根据业务逻辑和实际的硬件成本来综合考虑 net.core.rmem_default = 6291456 表示内核套接字接受缓存区默认大小 net.core.wmem_default = 6291456 表示内核套接字发送缓存区默认大小 net.core.rmem_max = 12582912 表示内核套接字接受缓存区较大大小 net.core.wmem_max = 12582912 表示内核套接字发送缓存区较大大小

net.ipv4.tcp_syncookies = 1 与性能无关。用于解决TCP的SYN攻击 net.ipv4.tcp_max_syn_backlog = 8192 这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可使出现Nginx繁忙来不及accept新连接时,Linux不至于丢失客户端发起的链接请求 net.ipv4.tcp_tw_recycle = 1 这个参数用于设置启用timewait快速回收 net.core.somaxconn=262114 选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。 net.ipv4.tcp_max_orphans=262114 选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立链接将立即被复位并输出警告信息。这个限制指示为了防止简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值

经验分享 程序员 微信小程序 职场和发展