状态页
#基于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格式**```shelllog_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,默认为1gzip_comp_level level;#禁⽤IE6 gzip功能gzip_disable "MSIE [1-6]\.";#gzip压缩的最⼩⽂件,⼩于设置值的⽂件将不会压缩gzip_min_length 1k;#启⽤压缩功能时,协议的最⼩版本,默认HTTP/1.1gzip_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.confgzip on ;gzip_comp_level 5;gzip_min_length 1k;gzip_types text/plain application/javascript application/x-javascripttext/cssapplication/xml text/javascript application/x-httpd-php image/jpegimage/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/certscd /apps/nginx/certsopenssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt#生成CAopenssl 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.c49 static u_char ngx_http_server_string[] = "Server: linux38" CRLF;#定义响应报⽂中的server字段信息
- 隐藏nginx版本号
