Nginx(三)

一、ngx_http_access_module
文件操作优化的配置

1、 allow address | CIDR | unix: | all;
2、 deny address | CIDR | unix: | all;
二、ngx_http_auth_basic_module
该模块采用基于HTTP基本身份验证的用户名和密码登录方式,来保护你的虚拟主机或目录
实现基于用户的访问控制,使用basic机制进行用户认证

1、 auth_basic string | off; 
2、 auth_basic_user_file file;
三、ngx_http_stub_status_module
用于输出nginx的基本状态信息

1、 stub_status;
四、ngx_http_log_module
指定日志格式记录请求

1、 log_format name string ...;
2、 access_log path
3、 open_log_file_cache max=N [inactive=time]
五、ngx_http_gzip_module
用gzip方法压缩响应数据,节约带宽

1、 gzip on | off;
2、 gzip_comp_level level;
3、 gzip_disable regex ...;
4、 gzip_min_length length;
5、 gzip_http_version 1.0 | 1.1;
6、 gzip_buffers number size;
7、 gzip_types mime-type ...;
8、 gzip_vary on | off;
9、 gzip_proxied off 
六、ngx_http_ssl_module
1、 ssl on | off;
2、 ssl_certificate file;
3、 ssl_certificate_key file;
4、 ssl_protocols [SSLv2]
5、 ssl_session_cache off | none
6、 ssl_session_timeout time;
一、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;
}
二、ngx_http_auth_basic_module
 该模块采用基于HTTP基本身份验证的用户名和密码登录方式,来保护你的虚拟主机或目录
实现基于用户的访问控制,使用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;   #用于设置htpasswd密码文件,htpasswd文件的内容可以用apache提供的htpasswd工具来产生
}
用户口令:
1、明文文本:格式name:password:comment

2、加密文本:由htpasswd命令实现
httpd-tools所提供为了安全可以文件设为隐藏    ".htpasswd"

yum install httpd-tools
设置加密算法 第一次加c

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

1、 stub_status;
示例:
location /status {        i
stub_status;      IP下目录
allow 172.16.0.0/16;      仅允许当前号段访问
deny all;
}

给状态信息加上访问权限 allow,deny

ab www.a.com 直接访问IP下的status目录

四、ngx_http_log_module
指定日志格式记录请求
log_format access '$remote_addr - $remote_user [$time_local] "$request" "$request_time" $status $body_bytes_sent
 "$http_referer" "$http_user_agent" $http_x_forwarded_for';

注释:
$remote_addr:与 $http_x_forwarded_for 用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的http的方式与url;
$request_time:用来记录请求时间;
$status:用来记录请求状态;成功是200,
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户端浏览器的相关信息

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

1、 log_format name string ...;
string可以使用nginx核心模块及其它模块内嵌的变量

2、 access_log path [format [buffer=size] [gzip[=level]][flush=time] [if=condition]];
access_log off;  用来指定日志文件的存放路径、格式和缓存大小。
通俗的理解就是先用log_format来定义自己想用的日志格式,然后在用access_log定义日志时再把定义的log_format名称 跟在后面;
访问日志文件路径,格式及相关的缓冲的配置
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;  主配置文件里http
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:验正缓存中各缓存项是否为活动项的时间间隔
五、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;
启用压缩功能的响应报文大小阈值   大于20字节
ngx_http_gzip_module
 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: AcceptEncoding”


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

 示例:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;

在生产中启用压缩功能

六、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];
off  禁用缓存,none  可以使用,但不真正的存储缓存
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存
6、 ssl_session_timeout time;
客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m
示例:
server {
listen 443 ssl;    强制ssl监听443,不强制系统会认为是http在监听
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;   key路径
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
}

证书文件自签名一个
Enter pass phrase: #输入密码,此密码用途证书签名
Verifying - Enter pass phrase: #确认密码
Common Name (eg, YOUR name) []:www.a.com ← 服务器主机名,若填写不正确,浏览器会报告证书无效,但并不影响使用

证书被加密

证书解密

两个文件拷贝到/etc/nginx/ssl/

打开443端口
-k/--insecure 允许不使用证书到SSL站点

openssl s_client -connect www.a.com:443

windows机器加快域名解析 解析
C:\windows\system32\drivers\etc\hosts文件并用记事本打开。

C:\windows\system32\drivers\etc\hosts文件并用记事本打开。添加www.a.com www.b.com

不信任证书导致的,继续前往

导出到桌面

安装证书

重新访问网页 ok

同一端口同一个主机上创建多个虚拟主机实现ssl加密
Server Name Indication(SNI)

SNI (Server Name Indication)是用来改善服务器与客户端 SSL (Secure Socket Layer)和 TLS (Transport Layer Security) 的一个扩展。主要解决一台服务器只能使用一个证书(一个域名)的缺点,随着服务器对虚拟主机的支持,一个服务器上可以为多个域名提供服务,因此SNI必须得到支持才能满足需求。

cd /etc/pki/tls/certs
mkdir nginx2.crt
Common Name (eg, YOUR name) []:www.b.com
mkdir nginx3.crt
Common Name (eg, YOUR name) []:www.c.com

解开私钥

创建 /app/website3/index.html 目录

|


成功完成一个主机建立多个https服务

推荐阅读更多精彩内容