[高性能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 的完整路径


>3. ngx_http_proxy_module模块:请求转发到另外一个主机.
1、proxy_pass URL;
注意:proxy_pass后面路径不带uri时,会将location的uri传递(附加)给后端主机
server {
  ...
  server_name HOSTNAME;
  location /uri/ {
    proxy_pass http://host[:port];                       注意: 最后没有/ 
  }
  ...
}
上面示例:http://HOSTNAME/uri --> http://host/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攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值