状态页
#基于ngx_http_Stud_Status_module模块实现
location /nginx_status {
stub_status;
allow 10.0.10.7;
allow 127.0.0.1;
deny all;
}
Active connections: 当前处于活动状态的客户端连接数,包括连接等待空闲连接数。
accepts:统计总值,Nginx⾃启动后已经接受的客户端请求的总数。
handled:统计总值,Nginx⾃启动后已经处理完成的客户端请求的总数,通常等于accepts,除⾮有因
worker_connections限制等被拒绝的连接。
requests:统计总值,Nginx⾃启动后客户端发来的总的请求数。
Reading:当前状态,正在读取客户端请求报⽂⾸部的连接的连接数。
Writing:当前状态,正在向客户端发送响应报⽂过程中的连接数。
Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于
active – (reading+writing),
第三方模块
- echo-nginx-module
变量使用
内置变量 变量信息**$remote_addr 客户端地址
$args URL的指令,也就是参数传递
$host 请求的主机
$http_user_agent 客户端浏览器的信息
$http_cookie 客户端的cookie
$remote_port 客户端的端口
$remote_user 用户名
$request_method 请求方法
$request_body_file 做反向代理发给后端服务器的本地资源路径
$request_filename 请求的资源文件路径
$request_uri 原始URI ,不包括主机名
$scheme 请求协议
$server_protocol 客户端请求资源使用的协议版本
$server_addr 保存了服务器的IP地址
$server_name 请求的服务器的主机名
$server_port 请求的服务器的端口号**自定义变量
set $name ahei;
echo $name;
自定义访问日志
- 默认格式 ```shell log_format nginx_format ‘$remote_addr - $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘“$http_user_agent” “$http_x_forwarded_for”‘ ‘$server_name:$server_port’; access_log logs/access.log nginx_format;
客户端地址-用户[时间]请求方式协议 状态 发送字节 头部携带信息 客户端信息 浏览器信息 请求主机。请求端口号
- **json格式**
```shell
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
access_log /apps/nginx/logs/access_json.log access_json;
压缩功能
#启⽤或禁⽤gzip压缩,默认关闭
gzip on | off;
#压缩⽐由低到⾼从1到9,默认为1
gzip_comp_level level;
#禁⽤IE6 gzip功能
gzip_disable "MSIE [1-6]\.";
#gzip压缩的最⼩⽂件,⼩于设置值的⽂件将不会压缩
gzip_min_length 1k;
#启⽤压缩功能时,协议的最⼩版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服务需要向服务器申请的缓存空间的个数*⼤⼩,默认32 4k|16 8k;
gzip_buffers number size;
#指明仅对哪些类型的资源执⾏压缩操作;默认为gzip_types text/html,不⽤显示指定,否则出错
gzip_types mime-type ...;
#如果启⽤压缩,是否在响应报⽂⾸部插⼊“Vary: Accept-Encoding”
gzip_vary on | off;
cat nginx.conf
gzip on ;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types text/plain application/javascript application/x-javascript
text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg
image/gif image/png;
gzip_vary on ;
https功能
实现步骤
1.客户端发起HTTPS请求:
客户端访问某个web端的https地址,⼀般都是443端⼝
2.服务端的配置:
采⽤https协议的服务器必须要有⼀套证书,可以通过⼀些组织申请,也可以⾃⼰制作,⽬前国内很多⽹站
都⾃⼰做的,当你访问⼀个⽹站的时候提示证书不可信任就表示证书是⾃⼰做的,证书就是⼀个公钥和私钥
匙,就像⼀把锁和钥匙,正常情况下只有你的钥匙可以打开你的锁,你可以把这个送给别⼈让他锁住⼀个箱
⼦,⾥⾯放满了钱或秘密,别⼈不知道⾥⾯放了什么⽽且别⼈也打不开,只有你的钥匙是可以打开的。
3.传送证书:
服务端给客户端传递证书,其实就是公钥,⾥⾯包含了很多信息,例如证书得到颁发机构、过期时间等等。
4.客户端解析证书:
这部分⼯作是有客户端完成的,⾸先回验证公钥的有效性,⽐如颁发机构、过期时间等等,如果发现异常则
会弹出⼀个警告框提示证书可能存在问题,如果证书没有问题就⽣成⼀个随机值,然后⽤证书对该随机值进
⾏加密,就像2步骤所说把随机值锁起来,不让别⼈看到。
5.传送4步骤的加密数据:
就是将⽤证书加密后的随机值传递给服务器,⽬的就是为了让服务器得到这个随机值,以后客户端和服务端
的通信就可以通过这个随机值进⾏加密解密了。
6.服务端解密信息:
服务端⽤私钥解密5步骤加密后的随机值之后,得到了客户端传过来的随机值(私钥),然后把内容通过该值
进⾏对称加密,对称加密就是将信息和私钥通过算法混合在⼀起,这样除⾮你知道私钥,不然是⽆法获取其
内部的内容,⽽正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
7.传输加密后的信息:
服务端将⽤私钥加密后的数据传递给客户端,在客户端可以被还原出原数据内容。
8.客户端解密信息:
客户端⽤之前⽣成的私钥获解密服务端传递过来的数据,由于数据⼀直是加密的,因此即使第三⽅获取到数
据也⽆法知道其详细内容
ssl参数配置
ssl on | off;
#为指定的虚拟主机配置是否启⽤ssl功能,此功能在1.15.0废弃,使⽤listen [ssl]替代。
ssl_certificate /path/to/file;
#当前虚拟主机使⽤使⽤的公钥⽂件,⼀般是crt⽂件
ssl_certificate_key /path/to/file;
#当前虚拟主机使⽤的私钥⽂件,⼀般是key⽂件
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
#⽀持ssl协议版本,早期为ssl,现在是TSL,默认为后三个
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
#配置ssl缓存
off 关闭 none 暂不支持
ssl_session_timeout time;
#客户端连接可以复⽤ssl session cache中缓存的有效时⻓,默认5m
自签名证书
mkdir /apps/nginx/certs
cd /apps/nginx/certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
#生成CA
openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.magedu.net.key -out www.magedu.net.csr
#生成key和csr文件
openssl x509 -req -days 3650 -in www.magedu.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.magedu.net.crt
#签发证书
nginx配置证书
listen 80;
listen 443 ssl;
ssl_certificate /apps/nginx/certs/www.magedu.net.crt;
ssl_certificate_key /apps/nginx/certs/www.magedu.net.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
多域名配置HTTPS
#制作key及csr文件
openssl req -newkey rsa:4096 -nodes -sha256 -keyout mobile.magedu.net.key -out mobile.magedu.net.csr
#签名证书
openssl x509 -req -days 3650 -in mobile.magedu.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out mobile.magedu.net.crt
#配置
listen 443 ssl;
server_name mobile.magedu.net;
ssl_certificate /apps/nginx/certs/mobile.magedu.net.crt;
ssl_certificate_key /apps/nginx/certs/mobile.magedu.net.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
favicon.ico
- 打开网址时显示的图标
location = /favicon.ico {
root /data/nginx/html/images;
#expires 90d ; 设置过期时间
}
- 打开网址时显示的图标
安全选项
- 隐藏nginx版本号
vim /usr/local/src/nginx/src/http/ngx_http_header_filter_module.c
49 static u_char ngx_http_server_string[] = "Server: linux38" CRLF;
#定义响应报⽂中的server字段信息
- 隐藏nginx版本号