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停掉了以后

访问页面

相关推荐
九河云1 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
热爱跑步的恒川2 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
一坨阿亮5 小时前
Linux 使用中的问题
linux·运维