四、重要常用的配置 4.1 权限控制
ngx_http_access_module 模块 ,实现基于ip 的访问控制功能
① allow address | CIDR | unix: | all;
② 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;
}
4.2 身份验证ngx_http_auth_basic_module 模块,实现基于用户的访问控制,使用basic 机制进行用户认证
① auth_basic string | off;
② auth_basic_user_file file;
location /admin/ {
auth_basic "Admin Area"; “提示字”
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
用户口令文件:
① 明文文本:格式name:password:comment
② 加密文本:由htpasswd 命令实现,httpd-tools 包所提供
4.3 状态信息页面ngx_http_stub_status_module 模块,用于输出nginx 的基本状态信息
① 设置
② 输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465 三个数字分别对应accepts,handled,requests 三个值
Reading: 6 Writing: 179 Waiting: 106
③ 定义
Active connections: 当前状态,活动状态的连接数
accepts :统计总值,已经接受的客户端请求的总数
handled :统计总值,已经处理完成的客户端请求的总数
requests :统计总值,客户端发来的总的请求数
Reading :当前状态,正在读取客户端请求报文首部的连接的连接数
Writing :当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
4.4 日志的设置ngx_http_log_module 模块,指定日志格式记录请求
① log_format name string ...; 定义日志格式
string 可以使用nginx 核心模块及其它模块内嵌的变量
② access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; 调用日志
access_log 路径 日志名 ;
访问日志文件路径,格式及相关的缓冲的配置
buffer=size 缓存大小
flush=time 多长时间清除缓存
示例:
log_format compression '$remote_addr-$remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log compression buffer=32k;
③ 略:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息
max :缓存的最大文件描述符数量
min_uses :在inactive 指定的时长内访问大于等于此值方
可被当作活动项
inactive :非活动时长
valid: 验证缓存 中各缓存项是否为活动项的时间间隔
4.5 压缩ngx_http_gzip_module 用gzip 方法压缩响应数据,节约带宽,默认没有设置开启
① gzip on | off;
启用或禁用gzip 压缩
② gzip_comp_level level;
压缩比由低到高:1 到 9,默认:1
③ gzip_disable regex ...;
匹配到客户端浏览器不执行压缩
④ gzip_min_length length;
启用压缩功能的响应报文大小
⑤ gzip_http_version 1.0 | 1.1;
设定启用压缩功能时,协议的最小版本,默认:1.1
⑥ gzip_buffers number size;
支持实现压缩功能时缓冲区数量及每个缓存区的大小,默认:324k 或 168k
⑦ gzip_types mime-type ...;
指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
默认包含有text/html,不用显示指定,否则出错
查看nginx的mime类型:cat /etc/nginx/mime.types
⑧ gzip_vary on | off;
如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
⑨ gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx:对于代理服务器请求的响应报文,在何种条件下启用压缩功能
off :对被代理的请求不启用压缩
expired,no-cache, no-store ,private :对代理服务器请求的响应报文首部Cache-Control 值任何一个,启用压缩功能
示例:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/Javascript;
测试压缩效果:
4.6 ssl 加密的实现https ssl 的实现
(1)server 里的选项:
1 、ssl on | off;
为指定虚拟机启用HTTPS protocol,建议用listen 指令代替
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];
builtin[:size] :使用OpenSSL 内建缓存,为每worker 进程私有
[shared:name:size] :在各worker 之间使用一个共享的缓存
6、ssl_session_timeout time;
客户端连接可以复用ssl session cache 中缓存的ssl 参数的有效时长,默认5m
示例:
server {
listen 443 ssl;
server_name ;
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;
}
4.7 地址重写ngx_http_rewrite_module 模块:
The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.
将用户请求的URI 基于PCRE regex 所描述的模式进行检查,而后完成重定向替换
示例:
-->
--> https://www.magedu.com/
(1)rewrite regex replacement [flag]
将用户请求的URI 基于regex 所描述的模式进行检查,匹配到时将其替换为replacement 指定的新的URI
注意:如果在同一级配置块中存在多个rewrite 规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查
隐含有循环机制, 但不超过10 次;如果超过,提示500响应码,[flag] 所表示的标志位用于控制此循环机制
如果replacement 是以 或https:// 开头,则替换结果会直接以重向返回给客户端
301 :永久重定向 302:临时重定向
分析:目录跳转,正则匹配到zz开头的,都永久重定向到zhengzhou,且后边的uri不变,如:index.html,
[flag]:
① last :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后对新的URI 启动新一轮重写检查;提前重启新一轮循环,不建议在lation 中使用
② break :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location 中使用
③ redirect :临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求;不能以 或https:// 开头,使用相对路径,状态码:302
④ permanent: 重写完成后以永久重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求,状态码 :301
(2)return
return code [text]; 例:return 403 "error";
return code URL; 例:return 302 ;
return URL; 例:return ;
停止处理,并返回给客户端指定的响应码
例:连续跳转,image永久重定向到img,img又跳到
location /image {
rewrite ^/image/(.*)$ /img/$1 permanent;
}
location /img {
return ;
}
(3)rewrite_log on | off; 把跳转的信息写到日志中
是否开启重写日志, 发送至error_log (notice level)
(4)set $variable value;
用户自定义变量,注意:变量定义和调用都要以$ 开头
(5)if (condition) { ... }
引入新的上下文, 条件满足时,执行配置块中的配置指令;server, location
condition:
比较操作符:
== 相同
!= 不同
~ :模式匹配,区分字符大小写
~* :模式匹配,不区分字符大小写
!~ :模式不匹配,区分字符大小写
!~* :模式不匹配,不区分字符大小写
文件及目录存在性判断:
-e, !-e 存在(包括文件,目录,软链接)
-f, !-f 文件
-d, !-d 目录
-x, !-x 执行