一、nginx详解

一、简介

Nginx 是一款轻量级的套接字服务,他的特点如下
一、可以充当很多角色或用途:
(1)如过web应用只是一堆简单的html、css、js等静态页面,那根本都用不到nginx的反向代理功能,可以直接用nginx对外提供服务,此时可以将其称之为静态文件服务
(2)在集群架构中,web层服务器上可以用nginx充当web服务用,其作用是反向代理web应用(fastcgi_pass、proxy_pass、uwsgi_pass)
(3)七层负载均衡(反向代理功能+upstream模块)
(4)四层负载均衡(反向代理功能+upstream模块)
(5)还可以基于location来区分动静态请求,实现动静分离,分离集群压力
二、性能非常强大(官方测试能够支撑 5 万并发连接,在实际生产环境中可以支撑 2 到 4 万并发连接。)
(1)内存消耗少,启动极快
(2)nginx采用多进程模型,每个进程都是单线程的,每个worker内的那唯一一个线程采用的是异步非阻塞事件驱动模型(epoll网络IO模型),从而使其非常轻量级且高并发能力极强,在互联网项目中广泛应用。
(3)开源软件,免费
(4)稳定性高,用于反向代理(负载均衡),宕机的概率微乎其微。
(5)支持热部署。在不间断服务的情况下,对软件版本升级。
三、nginx包含的应用场景

file

四、了解nginx的同类

1.apachehttpd,最早期使用的web服务,性能不高,操作难
2.nginx
tengineTengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性
openresty-nginxOpenResty 是一个基于 NginxLua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
3.IISwindows下的web服务
4.lighttpd:是一个德国人领导的开源 Web 服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的 Web Server 环境。具有非常低的内存开销,CPU 占用率低,效能好,以及丰富的模块等特点。
5.GWSgoogle web server
6.BWSbaidu web server

二、安装nginx

2.1 yum安装

yum安装见:https://egonlin.com/?p=9386
yum安装后会产生一些文件,为了让大家更清晰的了解Nginx软件的全貌,可使用rpm -ql nginx查看整体的目录结构及对应的功能,
了解即可
1.Nginx主配置文件

路径 类型 作用
/etc/nginx/nginx.conf 配置文件 nginx主配置文件
/etc/nginx/conf.d/default.conf 配置文件 默认网站配置文件

2.Nginx代理相关参数文件

路径 类型 作用
/etc/nginx/fastcgi_params 配置文件 Fastcgi代理配置文件
/etc/nginx/scgi_params 配置文件 scgi代理配置文件
/etc/nginx/uwsgi_params 配置文件 uwsgi代理配置文件

3.Nginx编码相关配置文件

路径 类型 作用
/etc/nginx/win-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-win 配置文件 Nginx编码转换映射文件
/etc/nginx/mime.types 配置文件 Content-Type与扩展名

4.Nginx管理相关命令

路径 类型 作用
/usr/sbin/nginx 命令 Nginx命令行管理终端工具
/usr/sbin/nginx-debug 命令 Nginx命令行与终端调试工具

5.Nginx日志相关目录与文件

路径 类型 作用
/var/log/nginx 目录 Nginx默认存放日志目录
/etc/logrotate.d/nginx 配置文件 Nginx的日志切割配置,由lograte工具管理详见https://egonlin.com/?p=9568第二小节,你也可以直接去/var/log/nginx目录下查看切割的结果

2.2 源安装

安装nginx依赖包

yum install gcc* glibc* -y
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
gcc:安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境
pcre pcre-devel:pcre 是一个 perl 库,包括 perl 兼容的正则表达式库,nginx 的 http 模块使用 pcre 来解析正则表达式
zlib zlib-devel:zlib 库提供了很多种压缩和解压缩方式,nginx 使用 zlib 对 http 包的内容进行 gzip
openssl openssl-devel:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库

下载压缩包

wget https://nginx.org/download/nginx-1.22.1.tar.gz

安装 Nginx 步骤

# 解压到当前目录
[root@localhost opt]# tar -zxvf /opt/nginx-1.12.2.tar.gz
# 进入解压目录
[root@localhost opt]# cd nginx-1.22.1/
# 配置参数(具体参数可以./configure --help命令查看)
[root@localhost nginx-1.22.1]# ./configure --prefix=/usr/local/nginx1.12.2 --with-http_stub_status_module --with-http_ssl_module
# 编译
[root@localhost nginx-1.22.1]# make
# 安装
[root@localhost nginx-1.22.1]# make install
# 验证
[root@localhost nginx-1.22.1]# /usr/local/nginx1.12.2/sbin/nginx -v
nginx version: nginx/1.22.1
# 制作软连接:一般./configure指定的prefix目录都会具体到nginx的版本,这样方便区分,但是在用的时候一般都会做软连接,这样既方便用也方便后续升级
[root@localhost nginx-1.22.1]# ln -s /usr/local/nginx1.12.2 /usr/local/nginx
# 配置环境变量/etc/profile.d/nginx.sh
export PATH=$PATH:/usr/local/nginx/sbin
# system管理配置
#源码包安装后没有办法使用system管理,需要我们自己配置
[root@localhost /usr/lib/systemd/system]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload #加载新的unit (*.service)配置文件

三、nginx常用命令

例如:/usr/local/nginx/sbin/nginx
Nginx 默认端口号为 80。-v、-t、-s 参数最为常用
参数:
-h:命令帮助
-v :打印版本号
-V:打印已经安装的插件等信息
-t:测试配置正确性并退出
-q:测试配置时只显示错误
-s:向主进程发送信号(reload 重新加载配置文件、stop 停止服务)
-p:指定Nginx服务器路径前缀
-c: 指定Nginx配置文件路径
-g: 指定Nginx附加配置文件路径\

示例

nginx #启动nginx。 等价于systemctl start nginx
nginx -s reopen #重启Nginx。 等价于systemctl restart nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx。 等价于systemctl reload nginx
nginx -s stop #强制停止Nginx服务。 等价于systemctl stop nginx
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -V 2>&1 | sed "s/\s\+--/\n --/g" #模块分行输出,格式化输出
killall nginx #杀死所有nginx进程
systemctl enable nginx #加入开机自启
Centos6:
启动:nginx
service nginx start
/etc/init.d/nginx start
加入开机自启:
chkconfig nginx on
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令

nginx -V # 大写子字母V可以看到nginx的更加详细的信息,包括加载的模块,具体内容解析如下

[root@web02 ~]# nginx -V #显示版本和配置选项信息,然后退出
。。。。
###########################内容解析#######################################
nginx version: nginx/1.18.0 #nginx版本
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) #
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments:
--prefix=/etc/nginx #nginx文件的安装路径,其它选项如果使用相对路径,那么以此路径为基础路径
--sbin-path=/usr/sbin/nginx #二进制程序的安装目录
--modules-path=/usr/lib64/nginx/modules #模块安装路径
--conf-path=/etc/nginx/nginx.conf #设置nginx的conf文件路径
--error-log-path=/var/log/nginx/error.log #设置nginx错误日志路径
--http-log-path=/var/log/nginx/access.log #设置nginx的访问日志路径
--pid-path=/var/run/nginx.pid #设置nginx的pid文件路径
--lock-path=/var/run/nginx.lock #设置lock文件临时存放的路径
--http-client-body-temp-path=/var/cache/nginx/client_temp #设置http客户端主体临时缓存路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp #设置http反向代理临时路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp #设置http的fastcgi临时缓存路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp #设置uwsgi临时目录
--http-scgi-temp-path=/var/cache/nginx/scgi_temp #scgi临时存放目录
--user=nginx #设置启动 worker 进程时所使用的非特权用户名
--group=nginx #设置启动 worker 进程时所使用的非特权用户组名
。。。。。。

四、nginx平滑升级方法

1.下载新版本的包
[root@web02 ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
2.解压
[root@web02 ~]# tar xf nginx-1.18.0.tar.gz
3.生成
[root@web02 nginx-1.18.0]# cd nginx-1.18.0
[root@web02 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx-1.18.0 --user=www --group=www --without-http_gzip_module --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module
4.编译安装
[root@web02 nginx-1.18.0]# make && make install
5.重做软连接:删除磁盘上的nginx包相关文件并不会影响已运行的nginx进程,因为代码文件都已经加载到内存中了
[root@web02 ~]# rm -rf /usr/local/nginx && ln -s /usr/local/nginx-1.18.0 /usr/local/nginx
6.重启服务
[root@web02 ~]# systemctl restart nginx

五、Nginx 配置文件

5.1 配置文件主体结构

一些全局配置 # 1、全局配置
events { ... } # 2、事件驱动配置
http{ # 3、http模块配置
upstream {}
server{
location { ... }
}
}
stream{ # 4、stream模块配置
upstream {}
server{
location { ... }
}
}

说明如下:

  • main:全局配置,所有其他配置块都包含在其内部
    • events 块:控制Nginx处理连接的方式。
    • http 块:Nginx处理http请求的主要配置块。
      • upstream块:配置负载均衡
      • server块:Nginx中主机配置块,可用于配置多个虚拟主机。
        • localtion块:可以有多个,用于匹配uri路径
    • stream块:stream做四层负载均衡并不常用
      • upstream块:配置负载均衡
      • server块:四层的server块内部必然是不能写location匹配uri地址
        补充:
        1、http块与stream块内的upstream及server块均可以有多个
        2、在 Nginx 配置文件中,每一条指令配置都必须以 “;” 分号结束。

file

留存作图地址:https://www.processon.com/diagraming/5889ff28e4b049e795ec6c62

5.2 全局配置介绍

events块、http块、stream块内部都可以包含很多配置,但就这三大块本身来说他们都是属于全局块的,这仨内部的东西暂且不说,先来说一下与他们并列处于顶级的一些配置

# 1、运行用户
user nobody;
# 2、工作的worker进程数,通过与cpu核数保持一致,设置为auto,nginx会自动配置为核数。
# 注意:nginx启动后还有一个master进程负责与用户交互响应会话,具体干活的是worker进程
worker_processes auto; #
# 3、全局错误日志:日志级别有:debug、info、notice、warn、error、crit、alert
#error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
# 4、PID文件
pid logs/nginx.pid;
# 5、include用来引入配置文件
# 下述指令的含义:nginx启动时会加载动态dynamic模块的所有配置,确保动态模块都加载到nginx中
include /usr/share/nginx/modules/*.conf;

我们在用nginx配置四层stream负载均衡时,yum安装stream动态模块会产生两个动作
1、下载的模块放到/usr/lib64/nginx/modules目录下
2、加载该插件模块的配置文件放到/usr/share/nginx/modules下

[root@lb ~]# ls /usr/lib64/nginx/modules/
ngx_stream_module.so
[root@lb ~]# ls /usr/share/nginx/modules/
mod-stream.conf
[root@lb ~]# cat /usr/share/nginx/modules/mod-stream.conf
load_module "/usr/lib64/nginx/modules/ngx_stream_module.so";

file

worker_processes 是 Nginx 服务器实现并发处理的关键所在。worker processes 值越大,可以支持的并发处理量也越多(并不是越大越好,因为会受到硬件、软件等设备的制约)

5.3 events块

储备知识:

 

默认情况下,每个worker进程都是单线程

 

解决方案:引入线程池,需要付出的代价:增大了出bug的几率,例如锁竞争问题、单个线程bug导致整个进程退出的问题

[root@web01 ~]# cat /etc/nginx/nginx.conf
......
user egon;
worker_processes 4;
events {
use epoll;
worker_connections 1024;
}
thread_pool egon_pool threads=3 max_queue=1024; # 定义线程池
http {
#aio threads;
aio threads=egon_pool; # 启用线程池
# 启用线程池与reuseport并不冲突
server {
listen 8089 reuseport backlog=10240;

重新加载nginx -s reload后查看,每个worker进程状态显示Sl,小写字母l代表多线程模式

[root@web01 ~]# ps aux |grep nginx
root 2184 0.0 0.1 39556 2204 ? Ss 19:11 0:00 nginx: master process /usr/sbin/nginx
egon 2548 0.0 0.0 64524 1956 ? Sl 20:01 0:00 nginx: worker process
egon 2549 0.0 0.0 64524 1956 ? Sl 20:01 0:00 nginx: worker process
egon 2550 0.0 0.0 64524 1956 ? Sl 20:01 0:00 nginx: worker process
egon 2551 0.0 0.0 64524 1956 ? Sl 20:01 0:00 nginx: worker process
[root@web01 ~]# pstree -p 2184 # {}花括号包含的代表是多线程的意思
nginx(2184)─┬─nginx(2548)─┬─{nginx}(2561)
│ ├─{nginx}(2562)
│ └─{nginx}(2563)
├─nginx(2549)─┬─{nginx}(2552)
│ ├─{nginx}(2553)
│ └─{nginx}(2554)
├─nginx(2550)─┬─{nginx}(2555)
│ ├─{nginx}(2556)
│ └─{nginx}(2557)
└─nginx(2551)─┬─{nginx}(2558)
├─{nginx}(2559)
└─{nginx}(2560)

 

说明:k8s中ingress-nginx中的nginx开启了reuseport,并且启用了aio threads线程池

5.4 http块

Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里

http {
#1、设定日志输出模板
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
#2、网络io优化参数
#2.1 开启sendfile特性可以显著提高静态文件(如图片、CSS、JavaScript文件等)传输的效率
# 原理如下
# 开启sendfile后可以减少数据在操作系统内核和用户空间之间的拷贝次数。
# 没有 sendfile 的情况下,传输文件通常需要经历如下步骤,数据需要在用户空间和内核空间之间进行两次拷贝。
# (1)从硬盘读取文件到用户空间的缓冲区(内核→用户空间)
# (2)将读取的数据从用户空间缓冲区写入到操作系统的网络缓冲区(用户空间→内核)
# (3)操作系统网络缓冲区发送数据到网络(内核→网络)
# 当开启了 sendfile 之后,这个操作简化了,并且可以避免将数据从内核空间拷贝到用户空间。sendfile 系统调用可以直接在内核中传输数据:
# (1)内核会将数据从文件系统缓冲区直接发送到网络堆栈,无需先拷贝到用户空间,然后再从用户空间拷贝到内核的网络堆栈
# (2)数据可以直接在内核地址空间中移动,避免了额外的上下文切换和数据复制开销
# 所以,sendfile 能够减少 CPU 的使用,减少操作系统的上下文切换,并允许更快地传输文件数据,特别是对于大型文件的传输
sendfile on;
#2.2 通常与sendfile一起用,当 tcp_nopush 设置为 on 时,Nginx 将尽可能发送较大的 TCP 数据包,减少 TCP 报文的数量,提高传输效率。这对于减少网络传输中的 TCP 慢启动阶段,减少网络延迟和提高网络吞吐量非常有用。这在传输大型文件或使用 HTTP/1.1 的 Keep-Alive 长连接时特别有效。
tcp_nopush on;
#2.3 开启Nagle算法,数据将会尽快发送出去,而不是等待缓冲区满或者接收到ACK。这会减少延迟,但可能会造成网络利用率低。这个选项在处理需要快速响应的短数据流(例如HTTP/1.1的keep-alive连接)时非常有用。
tcp_nodelay on;
#2.4、控制长连接的两个参数:
keepalive_timeout 65; # 开启长连接:如果客户端在65秒内没有再次发送新的请求,那么Nginx将关闭这个连接,反之如果在65秒内有新的请求到来,那么这个连接会保持开启,等待处理新的请求
keepalive_requests 100; # 默认情况下,Nginx的keepalive_requests 是设置为100,这个设置针对的是每个长连接在关闭前能处理的最大请求数量。你可以根据需要调整这个值。
#2.5开启gzip压缩,节省带块加速网络传输
gzip on;
# 3、控制客户端请求头的缓冲区大小和数量:应对请求头过大的情况
client_header_buffer_size 128k; # 设定用于保存客户端请求头的缓冲区的大小,当客户端发送的请求头超过这个大小时,Nginx 将使用临时文件来保存请求头。这可以防止恶意客户端发送大量数据来消耗服务器资源
large_client_header_buffers 4 128k; # 如果请求头过大,可以使用多个缓冲区来保存。格式为 <数量> <大小>。<数量>代表缓冲区数量,<大小>代表每个缓冲区的大小。
#4、mime.types定义了nginx可以识别的网络资源类型,例如css、js、jpg等
include /etc/nginx/mime.types;
#5、http响应header中,如果没有明确指定Content-Type,则默认使用default_type指定的
default_type application/octet-stream; # application/octet-stream。这是一种二进制的数据类型,意味着这种内容不会被浏览器解析,而是作为一个下载文件来处理。这主要用于那些不适合以普通文本或者其他MIME类型表示的文件,例如可执行文件。
# 5、设定虚拟主机配置
server {
#侦听80端口
listen 80;
listen [::]:80; # [::]: 这代表 IPv6 地址中的一个缩写,它等同于所有的 IPv6 地址,类似于 IPv4 中的 0.0.0.0
#定义使用 www.nginx.cn访问
server_name www.nginx.cn;
#定义服务器的默认网站根目录位置
root /usr/share/nginx/html; # 强烈建议用绝对路径,避免混淆,确实可能用相对路径但那除了绕晕你没啥意义
#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;
#默认请求
location / {
root /a/b/c; # 优先级高于外部
#定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面,出现以下状态码,uri定位到/50x.html,然后触发二次localtion匹配,对上location = /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html { # =号的匹配更精确,所以优先级更高
# 这里没有指定root目录,所以向外层查找,找到server层里定义的root,去该root指定的目录下找/50x.html
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
# 这里没有指定root,那去外层也就是server层定义的root指定的目录里找文件
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}

1、include mime.types;

Nginx 服务器作为 Web 服务器,必须能够识别这些资源类型才能正常响应,具体来说,以下是 /etc/mime.types 在 HTTP 响应中的作用

例如,当客户端请求一个 .jpg 图片文件时,Nginx 会检查 /etc/mime.types,找到 .jpg 对应的 MIME 类型 image/jpeg,然后在响应头部设置 Content-Type: image/jpeg。这样,客户端接收到该文件时就会以图片的形式来处理它。
# mime.types包含的部分类型
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
......
}

2、如果你是使用Nginx作为反向代理服务器,并且你希望与后端服务器之间的连接也保持长连接,你还可以在upstream块中添加keepalive设置,这需要Nginx的版本在1.1.4或者以上。例如:

upstream backend {
server backend1.example.com;
server backend2.example.com;
keepalive 32;
}

3、日志格式设置(重要,但很简单,看一下就行):
https://egonlin.com/?p=9568
4、反向代理服务器在转发请求的 http 头信息中,可以增加 x_forwarded_for 信息,用以记录原有客户端的 IP 地址和原来客户端的请求的服务器地址。

server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header X-Real-IP $remote_addr; # 设置真实/原始客户端的 IP 地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 追加原始客户端的 IP 地址到 X-Forwarded-For 头信息中。这样,在后端服务器中就可以通过读取 X-Forwarded-For 头信息来获取原始客户端的 IP 地址。
proxy_set_header Host $host;
}
}
在这个例子中,有三个和代理相关的头信息被添加到了请求中:
1、Host:保存的是原始请求头中的Host字段。这个字段是必要的,因为在某些应用中,会根据这个字段来判断如何处理请求。
2、X-Real-IP:保存的是客户端的真实IP地址。
3、X-Forwarded-For:记录了客户端的真实IP地址,以及所有中间代理服务器的地址。如果这个头已经存在,
Nginx会把当前服务器的地址添加到这个头的最后。这个头可以用来追踪请求的全部转发路径。
注意:proxy_set_header 这个指令必须在location块中,而不能在http或者server块中。
因为头信息的设置是在处理请求的时候进行的,所以它必须在处理请求的位置设置。

5、gzip

Nginx 开启 gzip 压缩功能,可以使网站的 css、js 、xml、html 文件在传输时进行压缩,提高访问速度,进而优化 Nginx 性能。
gzip 压缩可以配置 http,server 和 location 块下,位置不同,作用域不同。
1)作用:将响应报⽂发送⾄客户端之前可以启⽤压缩功能,这能够有效地节约带宽,并提⾼响应⾄客户端的速度。
2)语法:gzip
指令 含义
gzip on; 决定是否开启 gzip 模块,on 代表开启,off 代表关闭
gzip_min_length 1100; 设置允许压缩的页面最小字节(从header头的Content-Length中获取) ,当返回内容大于此值时才会使用 gzip 进行压缩,以 K 为单位,当值为 0 时,所有页面都进行压缩。建议大于1k
gzip_buffers 16 8k; 设置 gzip 申请内存的大小,其作用是按块大小的倍数申请内存空间。此处指按照原始数据大小以 8k 为单位的 16 倍申请内存
gzip_comp_level 6; 设置 gzip 压缩等级,等级越底压缩速度越快,文件压缩比越小,反之速度越慢文件压缩比越大;等级1-9,最小的压缩最快 但是消耗 cpu
gzip_disable “msie6” (IE5.5 和 IE6 SP1使用 msie6 参数来禁止 gzip 压缩 )指定哪些不需要 gzip 压缩的浏览器(将和User-Agents进行匹配),依赖于 PCRE 库
gzip_types text/plain text/css … 设置需要压缩的MIME类型,非设置值不进行压缩,即匹配压缩类型
3) 示例
http {
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "msie6";
gzip_vary on;
}

5.5 server块详解-虚拟主机

server 块主要负责配置虚拟主机。每个 http 块可以包含多个 server 块,而每个 server 块就相当于一个虚拟主机。
什么时虚拟主机

在同一台物理服务器上,只部署一个nginx,然后在nginx的配置文件内可以定义多个server,
每个server都可以用来管理一个站点、具有独立的程序及资源,可以独立地对外提供服务供用户访问
用户在访问这些站点时,就好像在访问一台独立的物理服务器一样,
但其实都源自于一台机器,访问的站点只是同一台物理机上的多个server配置而已,
这个server便被称之为虚拟主机了
该技术的产生是为了节省互联网服务器硬件成本。

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 沪ICP备2022009235号 沪公网安备31011802005110号 青浦区尚茂路798弄 联系方式-13697081366