Nginx-基础篇-03

二、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;
}

实现基于用户的访问控制,使用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所提供

举例:

1)编辑配置文件
vim /etc/nginx/conf.d/vhosts.conf
location /admin/ {
         auth_basic "Admin Area";
         auth_basic_user_file /etc/nginx/.ngxpasswd;
   }

2)创建出来上面定义的访问控制目录(主站点是/app/website1)
mkdir /app/website1/admin
创建页面用户测试
echo /app/website1/admin/index.html> /app/website1/admin/index.html
3)利用htpasswd工具创建账号
yum install  httpd-tools
[root@centos7_37 ~]# htpasswd -c /etc/nginx/.ngxpasswd user1
New password: 
Re-type new password: 
Adding password for user user1
创建第二个用户
[root@centos7_37 ~]# htpasswd  /etc/nginx/.ngxpasswd user2
New password: 
Re-type new password: 
Adding password for user user2
4)启动服务测试

三、ngx_http_stub_status_module模块

gx_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:当前状态,正在等待客户端发出请求的空闲连接数

举例:

location /status {
stub_status;
allow 172.16.0.0/16;
deny all;
}

四、ngx_http_log_module模块

指定日志格式记录请求

1、log_format name string ...;

string可以使用nginx核心模块及其它模块内嵌的变量

2、access_log path [format [buffer=size] [gzip[=level]] [flush=time]

[if=condition]];
access_log off;
访问日志文件路径,格式及相关的缓冲的配置
buffer=size
flush=time

3、open_log_file_cache max=N [inactive=time] [min_uses=N]

[valid=time];
open_log_file_cache off;
缓存各日志文件相关的元数据信息
max:缓存的最大文件描述符数量
min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项
inactive:非活动时长
valid:验证缓存中各缓存项是否为活动项的时间间隔

实例:日志格式定义

1)vim /etc/nginx/nginx.conf
log_format compression '$remote_addr-$remote_user [$time_local] '
                                '"$request" $status $bytes_sent '
                                '"$http_referer" "$http_user_agent" "$gzip_ratio"';
备注:添加到http区域
2)在子配置文件中调用
vim /etc/nginx/conf.d/vhosts.conf
access_log  /var/log/nginx/a.com.access.log  compression;生产中加(buffer=32k;)
启动服务
3)查看

五、ngx_http_gzip_module模块

用gzip方法压缩响应数据,节约带宽

1、gzip on | off;

启用或禁用gzip压缩

2、gzip_comp_level level;

压缩比由低到高:1 到 9
默认:1

3、gzip_disable regex ...;

匹配到客户端浏览器不执行压缩

4、gzip_min_length length;

启用压缩功能的响应报文大小阈值

5、gzip_http_version 1.0 | 1.1;

设定启用压缩功能时,协议的最小版本
默认:1.1

6、gzip_buffers number size;

支持实现压缩功能时缓冲区数量及每个缓存区的大小
默认:32 4k 或 16 8k

7、gzip_types mime-type ...;

指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
默认包含有text/html,不用显示指定,否则出错

8、gzip_vary on | off;

如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding"

9、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值任何一个,启用压缩功能

举例:压缩

1)编辑配置文件
vim /etc/nginx/conf.d/vhosts.conf
gzip on;
        gzip_comp_level 9;
        gzip_min_length 64;
        gzip_types text/plain;
2)重启测试
curl -I --compressed 192.168.43.17/m.txt

六、ngx_http_ssl_module模块

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];

none: 通知客户端支持ssl session cache,但实际不支持
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存

6、ssl_session_timeout time;

客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m

举例:ssl加密

1)首先生成证书-在这就简单操作了
cd /etc/pki/tls/
cd certs/
make a.com.crt
cp a.com.* /etc/nginx/conf.d/ -p
2)编辑配置文件指定路径
vim /etc/nginx/conf.d/vhosts.conf
server {
        listen 443 ssl;
        root /app/website1;
        server_name www.a.com;
        access_log  /var/log/nginx/a.com.access.log  compression;
        ssl_certificate /etc/nginx/conf.d/a.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/a.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
}
3)重启测试
备注:去掉证书私钥密钥
openssl rsa -in a.com.key -out a2.com.key
mv a2.com.key a.com.key
备注:上面加密是和原有配置分开的,下面把他们放在一起
server {
        listen 80 default_server;
        root /app/website1;
        server_name www.a.com;
        access_log  /var/log/nginx/a.com.access.log  compression;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 64;
        gzip_types text/plain;

        listen 443 ssl;
        ssl_certificate /etc/nginx/conf.d/a.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/a.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        location /admin/ {

                auth_basic "Admin Area";
                auth_basic_user_file /etc/nginx/.ngxpasswd;
        }


}

举例:一个物理服务实现多个https

是因为编译了TLS SNI support enabled
实现三个网站都https
1)准备三个证书
cd /etc/pki/tls/certs/
vim Makefile #把加密语句块去掉
/usr/bin/openssl genrsa  $(KEYLEN) > $@
make b.com.crt
make c.com.crt
cp b.com.* c.com.* /etc/nginx/conf.d/ -p
2)编辑配置文件指定路径
vim /etc/nginx/conf.d/vhosts.conf 
.,$y
备注:全部复制的意思
server {
        listen 80 default_server;
        root /app/website1;
        server_name www.a.com;
        access_log  /var/log/nginx/a.com.access.log  compression;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 64;
        gzip_types text/plain;

        listen 443 ssl;
        ssl_certificate /etc/nginx/conf.d/a.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/a.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        location /admin/ {

                auth_basic "Admin Area";
                auth_basic_user_file /etc/nginx/.ngxpasswd;
        }
}
server {
        listen 80 ;
        root /app/website2;
        server_name www.b.com;
        access_log  /var/log/nginx/b.com.access.log  compression;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 64;
        gzip_types text/plain;

        listen 443 ssl;
        ssl_certificate /etc/nginx/conf.d/b.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/b.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        location /admin/ {
auth_basic "Admin Area";
                auth_basic_user_file /etc/nginx/.ngxpasswd;
        }
}
server {
        listen 80 ;
        root /app/website3;
        server_name www.c.com;
        access_log  /var/log/nginx/c.com.access.log  compression;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 64;
        gzip_types text/plain;

        listen 443 ssl;
        ssl_certificate /etc/nginx/conf.d/c.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/c.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;

        location /admin/ {

                auth_basic "Admin Area";
                auth_basic_user_file /etc/nginx/.ngxpasswd;
        }
}
3)重启测试

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注