Nginx常用模块

news2024/11/24 9:22:44

Nginx常用模块

文章目录

  • Nginx常用模块
  • 1.Nginx常用模块
    • 1.1.Nginx目录索引/下载模块
      • 1.1.1.配置autoindex语法
      • 1.1.2.autoindex配置实例
      • 1.1.3上传资源
      • 1.1.4.autoindex_exact_size配置语法
      • 1.1.5.修改配置文件
      • 1.1.6.再次访问
      • 1.1.7.修改日期
      • 1.1.8.autoindex_localtime语法格式
      • 1.1.9.修改配置
      • 1.1.10.模拟企业内网仓库
    • 1.2.Nginx访问控制
    • 1.2.1.ngx_http_access_module配置语法
      • 1.2.2.ngx_http_access_module配置示例
    • 1.3.Nginx基础认证
      • 1.3.1.ngx_http_auth_basic_module模块配置语法
      • 1.3.2.ngx_http_auth_basic_module配置示例
    • 1.4.Nginx限流限速
      • 1.4.1.为什么要限速
      • 1.4.2.限速应用场景
      • 1.4.3.请求频率限速原理
      • 1.4.4.限制请求并发数
      • 1.4.5.限速示例
      • 1.4.6.限制并发连接数
      • 1.4.7.限制并发连接数示例
      • 1.4.9.限制下载速度
      • 1.4.10.综合场景实践
  • 2.Nginx状态监控
    • 2.1.ngx_http_stub_status_module模块配置语法
    • 2.2.配置示例
    • 2.3.配置实践
  • 3.Nginx资源缓存
    • 3.1.浏览器无缓存(图片)
    • 3.2.浏览器有缓存(图片)
    • 3.3.缓存过期校验
    • 3.4.缓存配置语法
    • 3.5.资源缓存配置场景
  • 4.Nginx资源压缩
    • 4.1.配置语法
    • 4.2.图片压缩案例
    • 4.3.文件压缩案例
  • 5.Nginx Location
    • 5.1.什么是Location
      • 5.1.1.Location语法示例
    • 5.2.Location优先级示例
    • 5.3.Location应用场景
    • 5.4.Location@重定向
  • 6.Nginx日志模块
    • 6.1.Nginx日志格式
    • 6.1.1.Nginx日志格式中常用的变量意思
    • 6.2.Nginx访问日志
    • 6.3.Nginx访问日志配置示例
    • 6.4.Nginx错误日志
    • 6.5.Nginx错误日志
    • 6.6.Nginx日志过滤

1.Nginx常用模块

1.1.Nginx目录索引/下载模块

目录索引也称为下载模块

我们写的/etc/nginx/conf.d/xxx.conf文件中index对应的ngx_http_index_module所支撑的,不开启autoindex off
优先会报403

当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块
前提必须开始autoindex on.

ngx_http_autoindex_module模块处理以斜杠字符(‘/’)结尾的请求,并生成目录列表

1.1.1.配置autoindex语法

#启用或禁用目录列表输出,on开启,off关闭
Syntax: autoindex on |off;
Default: autoindex off;
Context: http,server,location

Default:默认autoindex是关闭的
Context:可以作用在那个层里面,有http层,server层,location层

1.1.2.autoindex配置实例

[root@nginx/etc/nginx/conf.d]# vim mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        location / {
                root /code1/;
        }
}

创建目录
[root@nginx/etc/nginx/conf.d]# mkdir /code1/{CentOS,RedHat,Ubuntn}
[root@nginx/etc/nginx/conf.d]# ll /code1
总用量 0
drwxr-xr-x 2 root root 6 10月 21 16:25 CentOS
drwxr-xr-x 2 root root 6 10月 21 16:25 RedHat
drwxr-xr-x 2 root root 6 10月 21 16:25 Ubuntn

[root@nginx/etc/nginx/conf.d]# systemctl reload nginx

#index index.html写不写默认都是这个文件

添加本地hosts的解析
在这里插入图片描述

看看访问是否是403
在这里插入图片描述

开启上autoindex on
[root@nginx/etc/nginx/conf.d]# vim mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        autoindex on;
        location / {
                root /code1/;
        }
}

[root@nginx/etc/nginx/conf.d]# systemctl reload nginx

在这里插入图片描述
在这里插入图片描述

下面没有内容,上传写内容,随意都行

1.1.3上传资源

[root@nginx~]# mv *.rpm /code1/CentOS/

在这里插入图片描述

1.1.4.autoindex_exact_size配置语法

指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位
Syntax:autoindex_exact_size on |off;
Default: autoindex_exact_size on;
Context: http,server,location

1.1.5.修改配置文件

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        autoindex on;
        autoindex_exact_size off;
        location / {
                root /code1/;
        }
}
[root@nginx~]# systemctl reload nginx

1.1.6.再次访问

在这里插入图片描述

1.1.7.修改日期

在这里插入图片描述

1.1.8.autoindex_localtime语法格式

#指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区;off UTC时区
Syntax: autoindex_localtime on |off;
Default: autoindex_localtime on off;
Context: http,server,location

1.1.9.修改配置

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf

server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;

        location / {
                root /code1/;
               autoindex on;
               autoindex_exact_size off;
               autoindex_localtion on;
        }
}
[root@nginx~]# systemctl reload nginx

在这里插入图片描述

1.1.10.模拟企业内网仓库

实现与阿里云差不多的镜像仓库
1.使用rsync同步互联网的仓库;(也可以直接弄几个)
2.需要对外提供http访问方式;

1.使用rsync同步互联网的仓库(因为我下面有些rpm包了,所以这一步可以操作也可以不操作)
rsync -avz rsync://rsync/mirrors.ustc.edu.cn/repo/centos/ /repo/data
createrepo /repo/data   #将该目录创建为仓库目录


2.编辑配置文件
[root@nginx/etc/nginx/conf.d]# vim mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        location / {
                root /code1/;
        }
        location /data {
                root /code1;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
        }
}

3.创建访问的页面
[root@nginx/etc/nginx/conf.d]# cd /code1/
[root@nginx/code1]# vim index.html

4.配置镜像仓库
[root@nginx/code1]# mkdir data
[root@nginx/code1]# mv RedHat/ Ubuntn/ CentOS/ data/

5.重载服务
[root@nginx/code1]# systemctl reload nginx

那么肯定访问http://mirror.wzx.net/就是出现的/code1/index.html页面
访问http://mirror.wzx.net/后面加/data/就是到了我们镜像仓库的界面

在这里插入图片描述
在这里插入图片描述

我们也可以优化一下
因为两个location都用到了root /code1,那么我们就可以定义到全局中

在这里插入图片描述

1.2.Nginx访问控制

ngx_http_access_module模块允许限制对某些客户端地址的访问

1.2.1.ngx_http_access_module配置语法

#允许配置语法
Syntax: allow address |CIDR |unix: |all;
Default: -
Context: http, server, location,limit_except

#拒绝配置语法
Syntax: deny address |CIDR |unix: |all;
Default: -
Context: http, server, location,limit_except

1.2.2.ngx_http_access_module配置示例

正常我们都可以访问
在这里插入图片描述在这里插入图片描述

只允许指定的来源IP能访问/code1,其它网段全部拒绝    
[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        location / {
                index index.html;
        }
        location /data {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                allow 192.168.146.101/32;   #允许指定的地址活指定段访问
                deny all;                   #拒绝所有
        }
}


[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

[root@nginx~]# curl -HHost:mirror.wzx.net http://192.168.146.101/data/

发现192.168.146.101还可以访问

但是页面的我们就访问不到了
在这里插入图片描述

修改192.168.146.101拒绝访问,但是页面可以访问

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        location / {
                index index.html;
        }
        location /data {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                deny 192.168.146.101/32;
                allow all;
        }
}

在这里插入图片描述
在这里插入图片描述

注意:deny和allow的顺序是有影响的
默认情况下,从第一条规则进行匹配
如果匹配成功,则不继续匹配下面的内容。
如果匹配不成功,则继续往下寻找能匹配成功的内容。

1.3.Nginx基础认证

ngx_http_auth_basic_module模块允许使用HTTP基本身份验证,验证用户名和密码来限制对资源的访问。

1.3.1.ngx_http_auth_basic_module模块配置语法

#使用HTTP基本身份验证协议开启用户名和密码验证
Syntax: auth_basic string| off;
Default: auth_basic off;
Context: http, server, location, limit_except
#指定保存用户名和密码的文件
Syntax: auth_basic_user_file file;
Default: -
Context: http, server, location, limit_except

官网:http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html

指定保存用户名和密码的文件,格式如下:
#可以使用htpasswd程序或“openssl passwd”命令生成对应的密码;

#使用htpasswd创建新的密码文件,-c创建新文件 -b允许命令行输入密码
[root@nginx~]# yum install httpd-tools
[root@nginx~]# htpasswd -b -c /etc/nginx/nginx_password wzx 123456
Adding password for user wzx

-b:允许命令行输入密码
-c:创建新文件

[root@nginx~]# cat /etc/nginx/nginx_password
wzx: a p r 1 apr1 apr1W4s78KHK$PcXU5RcI3qkTivwUEgIeL.

1.3.2.ngx_http_auth_basic_module配置示例

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        location / {
                index index.html;
        }
        location /data {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                auth_basic "hello";
                auth_basic_user_file /etc/nginx/nginx_password;
        }
}

[root@nginx~]# systemctl reload nginx

解释说明:
auth_basic :描述
auth_basic_user_file /etc/nginx/nginx_password; 也可以写auth_basic_user_file nginx_password;
因为nginx的安装目录就是/etc/nginx/目录下面

在这里插入图片描述
在这里插入图片描述

为什么我们http://mirror.wzx.net/的url没有弹出来用户密码,是因为我们把auth…只作用到了/data的uri下面,如果我们把auth…作用于全局,那么uri都会弹出来用户密码

那我们作用于全局,看一下是否会弹出来用户密码

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        auth_basic "hello";
        auth_basic_user_file /etc/nginx/nginx_password;
        location / {
                index index.html;
        }
        location /data {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
        }
}

[root@nginx~]# systemctl reload nginx

1.4.Nginx限流限速

1.4.1.为什么要限速

限制某个用户在一定时间内能够产生的Http请求。或者说限制某个用户在下载速度。

503:过载保护

1.4.2.限速应用场景

下载限速:限制用户下载资源的速度;
ngx_http_core_module

请求限制:限制用户单位时间内所产生的Http请求数;
ngx_http_limit_req_module

连接限制:限制同一时间的连接数,及并发数限制;
ngx_http_limit_conn_module

1.4.3.请求频率限速原理

水(请求)从上方倒入水桶,从水桶下方流出(被处理);
如果说水(请求)流入的过快,水桶流出(被处理)的过满,来不及流出的水存在水桶中(缓存),然后以固定速率流出,水桶满后则水溢出(丢弃)。
简单来说就是:当处理速度,达不到请求的速度,则会将请求放置缓存,然后持续处理。当缓存被沾满,如果还有大量的请求,则会被丢弃

1.4.4.限制请求并发数

Syntax: limit_req_zone key zone=name:size rate=rate;
Default: -
Context: http

Syntax: limit_req zone number [burst=number] [nodelay];
Default: -
Contest: http, server, location

1.基于来源IP对下载速率限制,限制每秒处理1次请求,但可以突发超过5个请求放入缓存区

#http标签段定义请求限制,rate限制速率,限制一秒钟最多一个IP请求
http {
    limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
}

server {
    listen 80;
    server_name mirror.oldxu.net;
    #请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量,则返回503
    limit_req zone=req_one burst=3 nodelay;
    location / {
        root /code;
        index index.html;
    }
}

解释说明:
#limit_req_zone $binary_remote_addr 
#$binary_remote_addr 表示通过这个标识来做限制,限制同一客户端ip地址

#zone=req_one:10m rate=1r/s;
#zone=req_one:10m表示生成一个大小为10M,名为req_one的内存区域,用来存储访问的频次信息
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次

#limit_req zone=req_one burst=3 nodelay;
#zone=req_one设置使用哪个配置区域来做限制,与上面limit_req_zone里的name对应
#burst=3设置一个大小为3的缓存区,当有大量请求过来时,超过了访问频次限制的请求可以先放到这个缓存区内
#nodelay超过访问频次并且缓冲区也满的时候,则会返回503(也可以自定义返回值),如果没有设置,则所有请求
#会等待排队

1.4.5.限速示例

在这里插入图片描述

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        limit_req zone=req_one burst=3 nodelay;
        location / {
                index index.html;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

我们快速访问多次,就会出现503,是因为我们《503:过载保护》
在这里插入图片描述

1.4.6.限制并发连接数

Syntax: limit_req_zone key zone=name:size;
Default: -
Context: http

Syntax: limit_req zone number;
Default: -
Context: http, server, location

1.设置共享内存区域和给定建值的最大允许个连接数。超过此限制时,服务器将返回503错误已回复请求

[root@nginx~]# cat /etc/nginx/conf.d/mirror.wzx.net.conf
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
    listen 80;
    server_name mirror.oldxu.net;
    root /code;
    charset utf8;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    
    limit_conn conn_od 2;
    
    location / {
        index index.html;
    }
}        

1.4.7.限制并发连接数示例

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        limit_rate 200k;
        limit_conn conn_od 2;
        location / {
                index index.html;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

因为我们要建立2次连接,那么就用到了tcp的握手

创建一个文件
[root@nginx~]# dd if=/dev/zero of=/code1/Concurrencyfile bs=500M count=1

在这里插入图片描述

但是我们平常看到一些页面不让下载了,肯定不会报这个503,可能会返回一个请充值的页面,那我们接下来就简单的操作一下

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        limit_rate 200k;
        limit_conn conn_od 2;
        error_page 503 @temp;
        location @temp {
                default_type test/html;
                return 200 '请充值VIP服务';
        }
        location / {
                index index.html;
        }
}

1.4.9.限制下载速度

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        limit_rate_after 200m;   #达到200m开始限速
        limit_rate 100k;
        location / {
                index index.html;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

前面我们看还是MB大小
在这里插入图片描述

后面就变成KB大小
在这里插入图片描述

1.4.10.综合场景实践

限制web服务器请求数处理为1秒一个,触发值为5,限制用户仅可同时下载一个文件
当下载超过100M则限制下载速度为500k
如果同时下载超过2个视频,则返回提示"请进行会员充值"或者跳转到其他页面

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
#定义限制请求并发数
limit_req_zone $binary_remote_addr zone=req_test:10m rate=1r/s;
#定义限制并发连接数
limit_conn_zone $binary_remote_addr zone=conn_test:10m;
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;

        #调用
        limit_req zone=req_test burst=5 nodelay;
        #定义返回值,随便写(连续多次访问)
        limit_req_status 412;
        #限制用户仅可同时下载一个
        limit_conn conn_test 1;
        #当达到100m开始限速
        limit_rate_after 100m;
        limit_rate 500k;
        #如果出现503 502 500,则调整到内部页面 @:表示内部 error_page是自定义
        error_page 503 502 500 @error_page;
        location @error_page {
                return 302 https://vip.qq.com;
        }
        location / {
                index index.html;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

连续多次访问
在这里插入图片描述

只能下载同时下次一次,如果再次下载则会跳转到vip.qq.com页面
在这里插入图片描述

进行了302的跳转

在这里插入图片描述
在这里插入图片描述

2.Nginx状态监控

ngx_http_stub_status_module模块提供对基本状态信息的访问。
默认情况下不集成该模块,需要使用–with-http_stub_status_module集成(编译安装)
但是yum安装的就自带了,这个模块可以对我们的nginx进行基本的监控

在这里插入图片描述

2.1.ngx_http_stub_status_module模块配置语法

Syntax: stub_status;
Default: —
Context: server, location

2.2.配置示例

[root@nginx~]# cat /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        location /nginx_status {
                all 127.0.0.1;
                all 172.16.0.0/32;
                deny all;
                stub_status;
        }
}

2.3.配置实践

1.创建配置文件
[root@nginx~]# vim /etc/nginx/conf.d/nginx_status.conf
server {
        listen 80;
        server_name nginx.status.net;
        charset utf-8;
        location /nginx_status {
                stub_status;
        }
}

[root@nginx~]# nginx -t
[root@nginx/code1]# systemctl reload nginx

在这里插入图片描述

#此配置创建一个简单的网页,其基本状态数据可能如下所示:
[root@nginx~]# curl -HHost:nginx.status.net http://192.168.146.101/nginx_status
Active connections: 3
server accepts handled requests
 85 85 198
Reading: 0 Writing: 1 Waiting: 2

#Active connections:当前活跃连接数,包括
#accepts: 已接收的总TCP连接数量。
#Reading: 当前读取的请求头数量。
#Writing: 当前响应的请求头数量。
#Waiting: 当前等待请求的空闲客户端连接数。
#handled: 已处理的TCP连接数量

3.Nginx资源缓存

浏览器缓存设置用于提高网站性能,尤其是新闻网站,图片一旦发布,改动的可能是非常小的。所以我们希望
能否用户访问一次后,图片缓存在用户的浏览器长时间缓存

浏览器是有自己的缓存机制,它是基于HTTP协议缓存机制来实现的,在HTTP协议中有很多头(Headers)信息,
那么实现浏览器的缓存就需要依赖特殊的头信息来与服务器进行特殊的验证,如:Expires(http/1.0)
Cache-control(http/1.1)

3.1.浏览器无缓存(图片)

在这里插入图片描述

3.2.浏览器有缓存(图片)

在这里插入图片描述

3.3.缓存过期校验

浏览器缓存过期校验检查机制,说明如下:
1.浏览器请求服务器会先进行Expires、CacheControl的检查,检查缓存是否过期,如果没有过期则直接从缓存文件中读取。
2.如果缓存过期,首先检查是否存在etag,如果存在则会客户端会向web服务器请求if-None-Match,与etag值进行比对,由
服务器决策返回200还是304。3.如果etag不存在,则进行last-Modified检查,客户端会向web服务器请求If-Modified-Since,
与last-Modified进行比对,由服务器决策返回200还是304。

3.4.缓存配置语法

#作用: 添加Cache-Control Expires头
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location

3.5.资源缓存配置场景

[root@nginx~]# cat /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        location / {
                index index.html;
        }
        location ~ .*\.(jpg|gif|png)$ {
                expires 7d;
        }
        location ~ .*\.(css|js|swf|json|mp4|htm|html)$ {
                add_header Cache-Control no-store;
                add_header Pragma no-cache;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

在这里插入图片描述

4.Nginx资源压缩

Ngin将发送至客户端之前的数据进行压缩,然后传输这能够有效地节约带宽,并提高响应速度;但是也有个弊端,就是会消耗我们的cpu;可能会对图片,文本压缩

4.1.配置语法

#1、启用或关闭gzip压缩
Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location

#2、gzip支持的压缩类型
Syntax: gzip_types mime-type …;
Default: gzip_types text/html;
Context: http, server, location

#3、gzip压缩比率,压缩率越高(级别越高),CPU消耗越大 默认级别是1,最高是9
Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location

#4、gzip压缩的最小文件,小于设置的值文件将不会被压缩(由"Content-Length"响应头字段确定)最少20字节
Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location

#5、gzip压缩支持的协议版本
Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location

#6、启用压缩,是否在响应报文首部插入"Vary: Accept-Encoding" 因为有些浏览器是不支持的
Accept-Encoding"
Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location

4.2.图片压缩案例

[root@nginx~]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        location / {
                index index.html;
        }
        location ~ .*\.(jpg|gif|png)$ {
                #expires 7d;
                gzip off;
                gzip_http_version 1.1;
                gzip_comp_level 2;
                gzip_min_length 10k;
                gzip_types image/jpeg image/gif image/png image/webp image/tiff;
                gzip_vary on;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

解释说明:
gzip_types类型可以在/etc/nginx/mime.types这个文件进行查看;可以多写几个,这样为了防止有些图片没有进行压缩

在这里插入图片描述
在这里插入图片描述

我们开启压缩看看大小是否发生改变

[root@nginx~]# cat /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        location / {
                index index.html;
        }
        location ~ .*\.(jpg|gif|png)$ {
                #expires 7d;
                gzip on;  #改为on
                gzip_http_version 1.1;
                gzip_comp_level 2;
                gzip_min_length 10k;
                gzip_types image/jpeg image/gif image/png image/webp image/tiff;
                gzip_vary on;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

在这里插入图片描述

4.3.文件压缩案例

编辑一个文件,内容随便
[root@nginx/code1]# vim test.txt
[root@nginx/code1]# vim /etc/nginx/conf.d/mirror.wzx.net.conf
server {
        listen 80;
        server_name mirror.wzx.net;
        charset utf-8;
        root /code1;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        location ~ .*\.(txt|pdf)$ {
                gzip off;
                gzip_http_version 1.1;
                gzip_comp_level 2;
                gzip_min_length 1k;
                gzip_types text/plain application/pdf;
                gzip_vary on;
        }
}
[root@nginx/code1]# nginx -t
[root@nginx/code1]# systemctl reload nginx

我们先不开启压缩,看看大小是多少

在这里插入图片描述

开启压缩
gzip on;
压缩开到最大
gzip_comp_level 9;

在这里插入图片描述

5.Nginx Location

5.1.什么是Location

Location用来控制访问网站的uri路径
官网:https://nginx.org/en/docs/http/ngx_http_core_module.html#location
在这里插入图片描述

5.1.1.Location语法示例

location [ = | ~ | ~* | ^~ ] uri { … }
location @name { … }
/api/xxx/dadas/dsadsa
/apiv1/dsa/dsaxx/sadsa/
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
/ 通用匹配,任何请求都会匹配到 5

5.2.Location优先级示例

[root@nginx~]# cat /etc/nginx/conf.d/location.conf

server {
        listen 80;
        server_name location.wzx.net;
        location = / {
                default_type text/html;
                return 200 'location = /';
        }

        location / {
                default_type text/html;
                return 200 'location /';
        }

        location /documents/ {
                default_type text/html;
                return 200 'location /documents/';
        }

        location ^~ /images/ {
                default_type text/html;
                return 200 'location ^~ /images/';
        }
        location ~* \.(gif|jpg|jpeg)$ {
                default_type text/html;
                return 200 'location ~* \.(gif|jpg|jpeg)';
        }
}


#测试结果如下(建议是curl测试)
#1.请求 http://location.wzx.net/会被 location =/ 匹配
#2.请求 http://location.wzx.net/index.html会被 location / 匹配
#3.请求http://location.wzx.net/documents/1.html会被 location /documents/ 匹配
#4.请求http://location.wzx.net/images/1.gif会被 location ^~ /images/ 匹配
#5.请求http://location.wzx.net/documents/1.jpg会被 location ~* \.(gif|jpg|jpeg)$匹配

5.3.Location应用场景

[root@nginx~]# cat /etc/nginx/conf.d/location.conf
server {
        listen 80;
        server_name location.wzx.net;
        charset utf-8;

        #通用匹配,任何请求都会匹配到
        location = / {
                root html;
                index index.html;
        }

        #精确匹配,必须请求的uri是/nginx-status
        location /nginx_status {
                stub_status;
        }

        #严格区分大小写,匹配以.php结尾的都走这个
        location ~ \.php$ {
                default_type text/html;
                return 200 'php访问成功';
        }

        #严格区分大小写,匹配以.jsp结尾的都走这个
        location ~ \.jsp$ {
                default_type text/html;
                return 200 'jsp';
        }

        #不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这个
        location ~* \.(gif|jpg|png|js|css)$ {
                expires 3d;
        }

        #不区分大小写匹配
        location ~* \.(sql|bak|tgz.gz|git)$ {
                deny all;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

5.4.Location@重定向

location @name这样的location不用于常规请求处理,而是用于请求重定
也就是我们访问的页面不存在,就会被重定向

[root@nginx~]# vim /etc/nginx/conf.d/redirect.conf

server {
        listen 80;
        server_name location1.wzx.net;
        root /code1;
        charset utf-8;
        location / {
                index index.html;
        }
        #如果出现异常,则重新定向到@error这个location上
        error_page 404 @error;
        location @error {
                return 302 http://location1.wzx.net;
        }
}

[root@nginx~]# nginx -t
[root@nginx~]# systemctl reload nginx

在这里插入图片描述

6.Nginx日志模块

nginx的日志记录非常灵活,可以通过log_format来定义格式

6.1.Nginx日志格式

log_format定义日志语法格式
配置语法:包括:error.log access.log
Syntax: log_format name [escape=default|json] string …;
Default: log_format combined “…”;
Context: http

默认nginx定义语法格式如下
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;
access_log /var/log/nginx/access.log main;

#我们可以自定义
log_format test ‘$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] "KaTeX parse error: Double superscript at position 12: request" ' '̲status’;
access_log /var/log/nginx/access.log test;

6.1.1.Nginx日志格式中常用的变量意思

$remote_addr #记录客户端IP地址
$remote_user #记录客户端用户名
$time_local #记录通用的本地时间
$time_iso8601 #记录ISO8601标准格式下的本地时间
$request #记录请求的方法以及请求的http协议
$status #记录请求状态码(用于定位错误信息)
$body_bytes_sent #发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent #发送给客户端的总字节数
$msec #日志写入时间。单位为秒,精度是毫秒
$http_referer #记录从哪个页面链接访问过来的
$http_user_agent #记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length #请求的长度(包括请求行,请求头和请求正文)
$request_time #请求花费的时间,单位为秒,精度毫秒

#注:如果Nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址
#$remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中
#增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址

6.2.Nginx访问日志

access_log日志配置语法
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http,server, location, if in location, limit_except

6.3.Nginx访问日志配置示例

[root@nginx/etc/nginx/conf.d]# vim mirror.wzx.net.conf
#添加一行
access_log /var/log/nginx/mirror_wzx.log main;

[root@nginx/etc/nginx/conf.d]# nginx -t
[root@nginx/etc/nginx/conf.d]# systemctl reload nginx

在这里插入图片描述

[root@nginx/etc/nginx/conf.d]# tail -f /var/log/nginx/mirror_wzx.log
接下来开始访问这个网站
http://mirror.wzx.net/

在这里插入图片描述

6.4.Nginx错误日志

nginx常见的错误日志级别有debug |info |notice |warn |error |crit |alert |emerg级别越高
记录的信息越少,如果不定义,默认级别为warn,它可以配置在main、http、server、location段里

6.5.Nginx错误日志

error_log /var/log/nginx/error.log warn;

#关闭错误日志
error_log /dev/null;

6.6.Nginx日志过滤

一个网站会包含很多元素,尤其是有大量的images、js、css等静态资源。这样的请求可以不用记录日志
#请求favorite.ico时,不记录日志
location /favicon.ico {
access_log off;
expires 3650d;
}
#当有人访问gif、png等资源时,将日志丢入空
location ~* .*.(gif|jpg|png|css|js)$ {
access_log /dev/null;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C51】基于51单片机的出租车计价器设计

摘 要 随着我国经济的快速发展,出行选择乘坐出租车的人越来越多。与此同时电子信息技术的发展更新,更加准确、便捷、稳定的出租车计价收费系统随之出现。基于单片机的出租车计价系统的设计,不仅可以更加准确、稳定的反映计价情况,…

FreeRTOS—任务基础知识

文章目录 一、FreeRTOS任务特性二、FreeRTOS任务状态三、FreeRTOS任务优先级四、FreeRTOS任务实现五、任务控制块六、任务堆栈 一、FreeRTOS任务特性 简单没有使用限制(任务数量没有显示,一个优先级下可以有多个任务)支持抢占(高…

前端谷歌浏览器调试

【浏览器调试工具精讲】Chrome Dev Tools精讲,前端必看! 文章目录 命令菜单主题切换截屏窗口停放位置 常用Tabelement查找ID修改样式、样式文件定位 样式的来源如继承、自定义等让某个状态常驻如鼠标悬停全局、部分样式的的选择与取消复制样式某个样式属…

Java开发 - Canal的基本用法

前言 今天给大家带来的是Canal的基本用法,Canal在Java中常被我们用来做数据的同步,当然不是MySQL与MySQL,Redis与Redis之间了,如果是他们,那就好办了,我们可以直接通过配置来完成他们之间的主从、主主&…

【AUTOSAR】BMS开发实际项目讲解(三十)----电池管理系统电池SOH和SOE估算

电池SOH估算 关联的系统需求 Sys_Req_4004、Sys_Req_4005; 功能实现描述 SOH主要包括以下内容: SOH模块输入信息 序号 参数 说明 1 满电电压 4.14V 3 电芯OCV曲线 [CELL] 4 充放电循环次数 [CELL] 2 电芯循环衰减数据表 [CELL] SOH算法 ID Descr…

在docker中使用tomcat

检查本地操作系统版本: [rootnode ~]# cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLO…

第8届Python编程挑战赛初赛真题剖析-2022年全国青少年信息素养大赛

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛系列的第1讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信…

如何做好云渗透测试的威胁建模(上)

NO.1 威胁建模相关定义 微软针对威胁建模(Threat modeling)的描述:威胁建模是帮助保护系统、应用程序、网络和服务的有效方法。这是一种工程技术,用于识别潜在的威胁和建议,以帮助降低风险并在开发生命周期的早期实现…

nodejs接口联动获取req的各种类型数据,搭建可视化流程引擎平台

nodejs接口联动获取req的各种类型数据,搭建可视化流程引擎平台 搭建nodejs服务创建对外开放端口,获取基础数据GET—queryGET—paramsPOST 联动MYSQL数据库获取websites表的所有书链接数据库 插入 搭建nodejs服务 考虑跨域等性能,简易的工程化…

基于SpringBoot和Mybatis用两种方式实现分页查询

上一篇文章中封装了通用的返回结果、通用分页结果。本文具体记录一下如何基于Mybatis实现分页查询。 参考文章: Github:pagehelper-spring-boot Github:HowToUse.md mybatis-plus分页查询三种方法 MyBatis-Plus分页插件 系列文章指路👉 系列文章-基于Sp…

这会是下一代的 Java 程序员的技术栈吗?

Servlet 与 Reactive 技术栈 打开 Spring 的官方文档我们在 Reactive 一栏中可以看到下面的架构图,其中可以很明显的看到 Reactive 的技术栈跟 Servlet 技术栈是完全并行的。意思是说我们日常开发的 Servlet web 类型只是一半的内容,还有另外一半世界就…

TI AM64x开发板规格书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

1 评估板简介 创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 单/四核Cortex-R5F 单核Cortex-M4F多核处理器设计的高性能评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,高性能低功耗,稳…

3.2C++抽象类

C 抽象类 C的抽象类是指至少包含一个纯虚函数的类,不能被实例化。 抽象类的作用是为了实现接口的统一规范,使得不同的子类可以通过实现相同的纯虚函数来实现不同的行为。 定义抽象类时,需要在类中至少包含一个纯虚函数。 抽象类不能被实例…

idea如何连接数据库

输入数据库的用户名和密码就行 Database这里些数据库的名字 快速打开数据库设计 这句话是说时区有问题:因为Mysql用的是美国时区,要搞成中国时区: set global time_zone8:00; 打开cmd窗口: 输入 mysql -u root -p 密码&…

MySql高级篇-006 MySQL架构篇-02MySQL的数据目录:数据库下的主要目录结构、文件系统如何存储数据

第02章_MySQL的数据目录 1.MySQL8的主要目录结构 # 查询名称叫做mysql的文件目录都有哪些[rootatguigu07 ~]# find / -name mysql安装好MySQL 8之后,我们查看如下的目录结构: 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径:/var/…

华为手环8 六月免费表盘上线,让你的腕上表盘更丰富多彩

在如今这个科技与艺术相互融合的时代!工程师们给华为手环8花粉朋友准备的6月这一期好看又免费表盘已经上线。你可以根据自己的审美,选择一款最适合自己的表盘,展现出自己的个性和品味。快来选择你的专属表盘,让华为手环8成为你独特…

移动WEB开发之rem适配布局

css基础(一)css基础(一)_上半场结束,中场已休息,下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束,中场已休息,下半场ing的博客-CSDN博客css基础(二)c…

途乐证券|股市里的游资是什么?有什么特点?

股市是一个充满风险和机会的地方,吸引了各类投资者的目光,游资就是其中一种。那么股市里的游资是什么?有什么特点?途乐证券也为大家准备了相关内容,以供参考。 股市里的游资是什么? 一般来说,股…

【JavaScript】使用qrcode生成二维码

QRCode简介: QRCode.js 是一个用于生成二维码的 JavaScript 库。主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库。 使用步骤: 点击下载:https://github.com/davidshimjs/qrcodejs 或者mirrors / davidshimjs / qrco…

selenium 自动化测试 1-如何搭建自动化测试环境,搭建环境过程应该注意的问题

目录 前言: 1、selenium的介绍 2、selenium的版本介绍 3. selenium工作原理 4. selenium安装 4.1 安装selenium 4.2 安装浏览器驱动 4.3 安装浏览器 4.4 验证安装结果 5. 浏览器基本操作 前言: 搭建Selenium自动化测试环境是进行Web应用程序自…