Nginx网络服务四-----日志、Nginx压缩和ssl

1.自定义访问日志

如果访问出错---404,可以去看error.log日志信息

访问日志是记录客户端即用户的具体请求内容信息,而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此两者是不同的,而且Nginx的错误日志一般只有一个,但是访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式,格式中定义要保存的具体日志内容。

访问日志由 ngx_http_log_module 模块实现

官方帮助文档

http://nginx.org/en/docs/http/ngx_http_1og_module.html
日志只能 写在:http,server,loation,if in location,limit_except

1.1日志的格式可以自由指定

tail -f /apps/nginx/logs/access_log

查看日志

1.2主配置文件中加内容

log_format xzq '$remote_addr - remote_user \[time_local] "$request" '

'$status body_bytes_sent "http_referer" '

'"http_user_agent" "http_x_forwarded_for" "$host" ';

对比刚刚的日志信息

1.2.1子配置使用include

注意:想在子配置中用include,要放到内容最后

1.3自定义json 格式日志

方便ELK收集日志

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",' '"xff":"http_x_forwarded_for",'
'"referer":"http_referer",' '"tcp_xff":"proxy_protocol_addr",'
'"http_user_agent":"http_user_agent",' '"status":"status"}';

这些都是通过变量实现的

tail -f /apps/nginx/logs/access_log

###实时显示成功的日志信息

提取出它的状态码:200

2.Nginx压缩功能

支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源。Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module

官方文档: Module ngx_http_gzip_module

配置指令如下:

#开启或关闭,默认关闭

gzip on | off;

#压缩级别,值越小级别越低

gzip_comp_level level;

#禁用IE6 gzip功能

gzip_disable "MSIE [1-6]\.";

#小于1k,不压缩

gzip_min_length 1k;

#启用压缩功能时,协议的最小版本,默认HTTP/1.1

gzip_http_version 1.0 | 1.1;

#压缩缓存空间;默认:32 4k或者16 8k;

gzip_buffers number size;

#指明压缩的文件类型;默认为gzip_types text/html;

gzip_types mime-type ...;

这样写:

gzip_types text/plain application/javascript application/x-javascript text/css
application/xml text/javascript application/x-httpd-php image/gif image/png;

#加一个头部信息用 on;看到这个"Vary: Accept-Encoding" 代表压缩好了

gzip_vary on | off;

#先压缩好,直接把这个压缩包给它,服务器可以识别,就不用消耗cpu

gzip_static on | off;
#重启nginx并进行访问测试压缩功能

[root@centos8 ~]# cp /apps/nginx/logs/access.log /data/nginx/html/pc/m.txt

[root@centos8 ~]# echo "test" > /data/nginx/html/pc/test.html #小于1k的文件测试是否会压缩

[root@centos8 ~]# vim /apps/nginx/conf/nginx.conf

gzip on;

gzip_comp_level 5;

gzip_min_length 1k;

gzip_types text/plain application/javascript application/x-javascript text/css

application/xml text/javascript application/x-httpd-php image/gif image/png;

gzip_vary on;
#重启Nginx并访问测试:

[root@centos8 ~]# curl --head --compressed 192.168.91.100/test.html

HTTP/1.1 200 OK

Server: nginx

Date: Fri, 22 Feb 2019 01:52:23 GMT

Content-Type: text/html

Last-Modified: Thu, 21 Feb 2019 10:31:18 GMT

Connection: keep-alive

Keep-Alive: timeout=65

Vary: Accept-Encoding

ETag: W/"5c6e7df6-171109"

Content-Encoding: gzip #压缩传输
#验证不压缩访问的文件大小:
写文件压缩内容

去浏览器访问,看有没有压缩成功

3.https功能

Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

nginx 的https 功能基于模块ngx_http_ssl_module实现,因此如果是编译安装的nginx要使用参数ngx_http_ssl_module开启ssl功能,但是作为nginx的核心功能,yum安装的nginx默认就是开启的,编译安装的nginx需要指定编译参数--with-http_ssl_module开启

官方文档:

Module ngx_http_ssl_modulehttps://nginx.org/en/docs/http/ngx_http_ssl_module.htmlModule ngx_http_ssl_module

参数 https

ssl on | off;
#开启ssl功能,已经被淘汰了

listen 443 ssl;###用这个开启

ssl_certificate /path/to/file;
#指明证书的路径,CA证书是两个文件,合并为一个crt文件

ssl_certificate_key /path/to/file;
#指明证书路径,用私钥文件,一般是key文件

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
#支持ssl协议版本,早期为ssl现在是TLS,默认为后三个

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
#配置ssl缓存

off: #关闭缓存

none: #通知客户端支持ssl session cache,但实际不支持

builtin[:size]:#使用OpenSSL内建缓存,为每worker进程私有

[shared:name:size]:#在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称

ssl_session_timeout time;
#保留缓存的时长,默认5分钟

3.1ssl功能

3.2自签名证书

写配置文件
#所有的证书需要放在一起不能移开

mkdir ssl

cd ssl

把脚本拖进来

bash certificate.sh

cat kgc.com.crt(购买者) ca.crt(颁发者) > www.kgc.com.crt(合成一个,有ca和kgc的证书)

mv kgc.com.key www.kgc.com.key(密钥,用来加密解密)

ll www.kgc.com*(这是一个公私钥文件)

vim /apps/nginx/conf.d/m.conf

server{

listen 80;

listen 443 ssl;(监听443端口开启ssl)

root /data/;

ssl_certificate /data/ssl/www.kgc.com.crt;(证书的位置)

ssl_certificate_key /data/ssl/www.kgc.com.key;(密钥的位置)

ssl_session_cache shared:sslcache:20m;(缓存)

ssl_session_timeout 10m;(缓存超时时间)

}

浏览器访问

4.重写功能 rewrite

作用:重新帮客户书写请求的地址

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之

一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

4.1ngx_http_rewrite_module模块指令

官方文档: https://nginx.org/en/docs/http/ngx_http_rewrite_module.html

4.1.1 if指令

https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if官方文档: https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

if (条件匹配) {

action

}

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false

!= #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false

~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真

-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

#注意:

#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。

#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

#示例:

http://www.baidu.com

3字打头重定向
301 永久重定向 将缓存记录在浏览器中
302 临时重定向 没有缓存 每次都要重定向
304

4.2 return

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置

语法格式:

www.kgc.com/test/

404

return code; #返回给客户端指定的HTTP状态码

return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号

return code url; #返回给客户端的URL地址

状态码:301和302

301:永久重定向 (读取过一次,会将配置缓存在客户端;即使Nginx服务器宕机,在缓存时间内也可以跳转)

302:临时重定向 (不会存在客户端;每次跳转页面,都要问一遍服务器,然后解析;一旦服务器宕机,就无法跳转)

1.状态码为302时

1.2.把nginx停掉,再去访问

2.当状态码为301时

2.1访问一个不存在的页面

当我们访问一个不存在的页面时,状态码就不是301,会从别的地方跳转过来

2.2访问页面存在时

当我们访问页面存在时,状态码为301

2.1当把nginx停掉了以后

访问页面

相关推荐
For. tomorrow2 分钟前
Vue3中el-table组件实现分页,多选以及回显
前端·vue.js·elementui
客观花絮说3 分钟前
DSC+DW实时+异步搭建部署
运维
大耳朵土土垚10 分钟前
【Linux 】开发利器:深度探索 Vim 编辑器的无限可能
linux·编辑器·vim
极客小张17 分钟前
基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程
linux·stm32·单片机·opencv·物联网
x66ccff23 分钟前
【linux】4张卡,坏了1张,怎么办?
linux·运维·服务器
布瑞泽的童话29 分钟前
无需切换平台?TuneFree如何搜罗所有你爱的音乐
前端·vue.js·后端·开源
网络研究院35 分钟前
攻击者将恶意软件分解成小块并绕过您的安全网关
网络·网关·安全·攻击·技术·分块·分析
白鹭凡41 分钟前
react 甘特图之旅
前端·react.js·甘特图
jjb_23643 分钟前
LinuxC高级作业2
linux·bash