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

访问页面

相关推荐
桂月二二21 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
幽兰的天空1 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc1 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️1 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️1 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
初级代码游戏1 小时前
openssl 正确生成v3带SAN的证书
https·证书·ssl·openssl·tls·v3
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
不会飞的小龙人2 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像