nginx工作机制 常用参数 匹配规则 转发细节 配置https 常用模块

2018-10-04 16:53:00
admin
原创 2134
摘要:nginx工作机制 常用参数 匹配规则 转发细节 配置https 常用模块

一、nginx工作机制

配置更新:

1、nginx –s reload给主进程发送SIGHUP信号;

2、主进程重新加载配置并fork一套新的工作进程,新工作进程开始处理新连接;

3、主进程发出信号,通知旧工作进程安静地退出;


二进制升级:

1、二进制升级与配置更新比较类似;

2、新的nginx主进程与原来的主进程并行,它们共享监听套接字,两个进程都活跃;

3、然后通知旧的主进程与其工作进程完美退出;


若干其它细节:

如果需要支持4层代理,编译时需要使用参数--with-stream或--with-stream=dynamic;


二、nginx常用参数

server_tokens,是否显示nginx版本号,默认显示;

max_fails,连续失败多少次认为server不可用,默认1次;

fail_timeout,max_fails次失败后,暂停的时间,默认10秒;

worker_processes number | auto,工作进程数目,默认1个进程,auto则配置为cpu核个数;

accept_mutex on | off,多个进程监听一个端口,操作系统新内核保证一次只唤醒一个进程,不会出现惊群,所以默认off值;

client_max_body_size,最大请求数据大小,默认1M,零表示不限制,太小会导致413错误,Request Entity Too Large;

backup,主备模式配置,不能同hash、ip_hash、random一起配置;

allow,允许IP地址访问;

deny,禁止IP地址访问;


nginx缓存设置:

1、proxy_request_buffering,是否缓存请求,默认开启,请求数据全部收到才会转发;

2、proxy_buffering,是否缓存返回,默认开启,一边接收rs数据,一边转发数据给client;

3、rs到nginx通常很快,nginx到client通常较慢,有读写缓存,所以可能导致回包延迟变大;

4、开启缓存返回,nginx转发数据给client,产生较多epoll_wait,是导致回包延迟变大的原因;


client到nginx默认长连接,nginx到server长连接需要配置:

1、proxy_http_version 1.1;
2、proxy_set_header Connection "";

3、keepalive 32; 工作进程空闲连接数不要设置太大,防止没有连接可以响应新的请求;
4、keepalive_timeout 60s; 默认60秒;
5、keepalive_requests 100; 默认100个请求后回收连接;


三、nginx匹配规则

域名匹配:

1、精准域名匹配;
2、头部通配最长匹配,比如*.example.com;
3、尾部通配最长匹配,比如, example.*;
4、按照配置顺序第一个匹配的正则表达式;


路径匹配:

1、匹配规则之前会先规范化URL,比如解释%XX、解释相对路径、合并正斜杠;

2、=精准匹配成功则终止,^~前缀匹配成功则终止,精准匹配优先级高于前缀匹配;

3、~正则匹配,~*忽略大小写正则匹配,优先级高于不带任何符号的前缀匹配;


四、nginx转发细节

变量说明:

1、$http_host,请求头host字段,包含端口,优先使用该变量;
2、$host,按顺序从请求行、请求头host字段、nginx配置的服务名获取,不包含端口;
3、$server_name,nginx配置的服务名;

4、$server_port,nginx配置的端口;
5、$scheme,请求模式,http或https;


转发设置:

proxy_set_header Host $http_host;
proxy_set_header Host-Port $server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;


转发消息的请求头host字段:

1、默认从proxy_pass指令的地址获取;

2、通过proxy_set_header来显示设置;

3、host值等于upstream名称时,nginx会修改302重定向地址;

4、host值不等于upstream名称时,nginx不修改302重定向地址;


五、nginx限流配置

1、limit_req用于限制单位时间请求量,每秒请求量或每分钟请求量,内部以毫秒跟踪请求量;

2、burst用于配置请求缓存,分为delay和nodelay两种执行模式,默认延迟执行;

3、delay=num,多少个请求之后开始延迟执行,默认是0,所有请求延迟执行;

4、延迟执行在将来时间执行请求,受限单位时间请求量,缓存用完立即可用;

5、立即执行在当前时间执行请求,当前未利用请求量导致缓存可用;

6、limit_rate用于限制单个连接返回速率,总速率受连接数影响;

7、limit_speed用于限制单个用户请求速率,总速率不受连接数影响;


限制单位时间请求量:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_req_zone $server_name zone=perserver:10m rate=500r/s;
limit_req zone=perip burst=10 nodelay;
limit_req zone=perserver burst=500;


限制连接数量和返回速率:

limit_conn_zone $binary_remote_addr zone=perip:50m;
limit_conn_zone $server_name zone=perserver:50m;

limit_conn perip 200;
limit_conn perserver 1000;
limit_rate_after 5m;
limit_rate 2m;


限制总请求速率:

1、下载模块,nginx_limit_speed_module

2、设置内存,limit_speed_zone one $binary_remote_addr 10m;

3、限制大小,limit_speed one 10m;


六、nginx配置https

https常用配置项:

ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!DH:!DHE:!RC4:!MD5:!NULL:!aNULL;

ssl_prefer_server_ciphers on;
ssl_certificate
ssl_certificate_key

ssl_password_file
ssl_client_certificate


ssl_ciphers,openssl编码的加密套件,解析套件:openssl ciphers -v 'HIGH:!aNULL:!MD5'

ssl_prefer_server_ciphers,优先选择服务端支持的加密套件,安全性更高;

ssl_password_file,存放私钥的密码,如果不指定,启动时需要输入私钥密码;

ssl安全检测:myssl.com亚洲诚信服务,支持查询DNS

ssl部署检测:myssl.cn


七、nginx打印日志

1、upstream_connect_time表示与后端服务建立连接花费时间;

2、upstream_header_time表示建立连接到返回第一个字节花费时间;

3、upstream_response_time表示建立连接到返回最后一个字节花费时间;

4、四层代理和七层代理使用不同模块,所以日志格式变量会有区别;


打印调试日志:

1、增加编译参数生成更多调试日志--with-debug,nginx -V可以查看编译参数,程序默认就有一些调试日志;

2、打印调试日志方法:error_log /path/to/log debug;

3、打印调试日志方法:debug_connection address;


打印请求日志:

log_format myproxy "$remote_addr"
                   "\t$time_local"
                   "\t$request"
                   "\t$status"
                   "\t$request_length"
                   "\t$bytes_sent"
                   "\t$request_time"
                   "\t$server_addr:$server_port"
                   "\t$upstream_addr"
                   "\t$upstream_bytes_sent"
                   "\t$upstream_bytes_received"
                   "\t$upstream_connect_time"
                   "\t$upstream_header_time"
                   "\t$upstream_response_time";
access_log logs/access.log myproxy;


八、nginx常用模块

ngx_http_core_module,核心配置模块;

ngx_http_upstream_module,配置负载均衡;

ngx_stream_proxy_module,支持4层反向代理;

ngx_http_proxy_module,支持7层反向代理;

ngx_http_ssl_module,支持https;

ngx_http_access_module,控制访问的IP地址;

ngx_http_dyups_module,动态更新upstream,阿里开源模块;

发表评论
评论通过审核之后才会显示。