Nginx-安装&应用

1 Nginx 介绍篇

1.1 Nginx 应用场景

  1. HTTP 服务器
  2. FTP 服务器
  3. 反向代理
  4. 负载均衡

1.2 Nginx 优点

  1. 高并发支持
  2. 内存消耗低
  3. 高拓展性
  4. 高可靠性

2 环境准备 & 安装搭建

CentOS7

参考:如何在 CentOS 7 上安装 Nginx - 开发指南 - 博客园 (cnblogs.com)

安装 nginx:

sudo yum install nginx

安装后,配置文件路径:/etc/nginx/

nginx_install_conf_path.png

html 路径:/usr/share/nginx/html

nginx_install_html_path.png

这里 nginx 被 centOS 做了一些修改,导致初始页面变成了 CentOS 而不是 Nginx 的那个原生的。不过不影响使用。

设置 Nginx 开机启动:

sudo systemctl enable nginx

启动 Nginx:

sudo systemctl start nginx

检查 Nginx 的运行状态:

sudo systemctl status nginx

查看 Nginx 版本

nginx -v

查看配置文件是否正确:

nginx -t

关闭 nginx:

nginx -s stop

#或:

nginx -s quit #更优雅,防止正在连接的请求直接失败

nginx 启动后,直接在访问 http://your_ip 即可访问初始页面。

这里的 “your_ip” 是你服务器的 ip

3 Nginx 开启 GZIP 压缩

Nginxgzip 功能是用于压缩HTTP响应内容的功能。当启用gzip时,在发送给客户端之前,Nginx会将响应内容压缩以减小其大小。这样可以减少数据传输的带宽消耗和响应时间,提高网站的性能和速度。

3.1 常用配置项

名称参考参数详解
gzipon是否开启 gzip 压缩(on:开启;off:关闭)
gzip_min_length1k最小压缩单位,小于 1k 时,压缩意义不大
gzip_comp_level6压缩级别,1-9 可选,数字越大,压缩效果越好,但是会加大 CPU 压力,高并发场景不宜调的太高
gzip_typesjs、css、test、json 等压缩类型,取自 application/type,文本文件的压缩效果最好
gzip_veryon用在响应头添加 very:accept-encoding,让代理服务器根据请求头识别是否启用了gzip压缩
gzip_http_version1.1启用 gzip 压缩的最低 http 协议版本,这里也可以不填,默认就是1.1
gzip_buffers2 4k设置压缩所需要的缓冲区大小,以 4k 为单位,如果文件为 7k 则申请 2*4k 的缓冲区
gzip_staticon静态压缩,提前准备好了压缩文件,在同目录下会有一个 .gz 的压缩包,避免动态压缩,性能更好
gzip_disableMSIE[1-6]\.设置禁用浏览器进行 GZIP 压缩,IE6 的某些版本对 gzip 的压缩支持很不好,会造成页面假死

3.2 使用示例

使用前配置:

server {

    listen       80;
    listen  [::]:80;
    server_name  www.xxx.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

使用 gzip 前 js 请求:

请添加图片描述

这里截取了最大的一个 js 文件,3.4MB ,这一个文件的请求用了 7.16 秒 ,可见是非常耗时的。

使用 gzip 配置:

server {
    
    # gzip 相关配置
    gzip on;
	gzip_types application/javascript;
	gzip_min_length 1k;
	gzip_comp_level 9;

    listen       80;
    listen  [::]:80;
    server_name  www.xxx.com;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

使用 gzip 后 js 请求:

请添加图片描述

可以看到,使用 gzip 后,请求 js 文件大小变成了 1.1MB ,请求时间更是达到了 1.97 秒 ,可见优化效率之高,文件大小压缩率达到了 67.6% , 请求速度提升了 72.5%

gzip 还有其它参数,这里就不一一演示了,总之从数据上已经证明了其对文件的请求优化效率之高。

4 Nginx 开启限流

Nginx 的限流主要是两种方式:限制访问频率限制并发连接数

通过两个配置型实现:

  1. limit_req_zone:用来限制单位时间内的请求数,即速率限制 , 采用的漏桶算法 leaky bucket
  2. limit_conn_zone:用来限制同一时间连接数,即并发限制。

4.1 限制访问频率

配置项: limit_req_zone

该配置项有三个参数:

  1. key:限流对象。binary_remote_addr 是一种 key,表示基于 remote_addr(客户端 IP) 来做限流,binary_ 的目的是压缩内存占用量。
  2. zone:存储访问信息的共享内存区大小。1M 能储存 16000 个 IP 地址,rateLimit:10m 表示一个大小为 10M,名字为 rateLimit 的内存区域。
  3. rate:最大访问速率。rate=10r/s 表示 1s 最多处理 10 次请求。

配置实战:

这里只展示该配置项相关配置,无关配置已省略

nginx.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
	
	limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s;
        
    server {

        listen       80;
        listen  [::]:80;
        server_name  www.xxx.com;

        location / {
            # 使用限流策略,burst=2,burst 爆发的意思,相当于提供了一个待处理请求缓存区。
            # nodelay 的作用是在缓存区满了的时候,新请求直接返回 503,不加这个参数就会继续排队。
            limit_req zone=rateLimit burst=2 nodelay;
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
	}
}

效果展示:

请添加图片描述

可以看到,许多请求失败。

4.2 限制并发数量

配置项: limit_conn_zone

该配置项有两个参数:

  1. key :定义限流对象,binary_remote_addr 是一种 key,表示基于 remote_addr(客户端 IP) 来做限流,binary_ 的目的是压缩内存占用量。
  2. zone:存储访问信息的共享内存区大小。1M 能储存 16000 个 IP 地址,rateLimit:10m 表示一个大小为 10M,名字为 rateLimit 的内存区域。

配置实战:

这里只展示该配置项相关配置,无关配置已省略

nginx.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
	
	limit_conn_zone $binary_remote_addr zone=perip:10m;
	limit_conn_zone $server_name zone=perserver:10m;
        
    server {

        listen       80;
        listen  [::]:80;
        server_name  www.xxx.com;

        location / {
            # 对应的 key 是 $binary_remote_addr,表示限制单个 IP 同时最多能持有 1 个连接。
			limit_conn perip 1;
			# 对应的 key 是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。注意,只有当 request header 被后端 server 处理后,这个连接才进行计数。
			limit_conn perserver 10 ;
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
	}
}

效果展示:

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

临安剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值