Nginx

1 什么是Nginx

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。

  • Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

2 反向代理

  • 正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)

  • 反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)

3 负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx给出来三种关于负载均衡的方式:

轮询法(默认方法):
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
​
weight权重模式(加权轮询):
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
​
ip_hash:
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4 动静分离

Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式。

目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!

5 软件安装

Windows和Linux在官网都可以下载到: nginx: download

5.1 Windows

下载后解压缩即可使用:

目录介绍

  • conf:Nginx配置文件,其中我们主要关注修改的是 nginx.conf 文件,其他文件不做过多赘述

  • contrib:辅助工具,自带了一个vim编辑器

  • docs:一些说明文档

  • html:Nginx默认的静态资源根目录,自带了一个index.html和5xx.html文件

  • logs:Nginx默认的日志文件根目录

  • temp:临时数据目录

  • nginx.exe:Nginx主程序

启动方式

  • 方式一:双击nginx.exe,双击后你能看见一个小黑窗口一闪而过,即启动成功。

  • 方式二:打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车亦可启动。注意:关闭窗口并不会关闭nginx。

启动注意事项:如果安装目录是中文的情况,启动nginx时可能会。如果配置文件配错信息了,也会启动失败。启动成功后,后台会有Nginx的服务进程。

浏览器地址栏输入网址 http://localhost 回车,出现以下页面说明启动成功!

该页面即为 html\index.html 目录下的页面。

特别说明:这里的访问url只输入了虚拟域名,即127.0.0.1的IP地址,但并没有输入端口号,即可访问到Nginx服务。
原因为HTTP协议在访问时,若没有指定端口号,默认访问80端口,而Nginx默认监听的是80端口。

停止方式

方法一:在cmd窗口输入nginx命令 nginx -s stop 快速停止nginx,该方式可能会导致数据丢失。需要在nginx目录下执行命令。

方式二:在cmd窗口输入nginx命令 nginx -s quit 完整有序的停止nginx,该方式属于正常关闭,不会出现数据丢失问题。需要在nginx目录下执行命令。

方法三:在cmd窗口输入nginx命令 taskkill taskkill /f /t /im nginx.exe ,该方式属于强制终止进程,可在任意目录结构下执行该命令。

注解:taskkill是用来终止进程的,/f是强制终止,/t终止指定的进程和任何由此启动的子进程,/im示指定的进程名称;

加载配置

nginx的配置文件是conf目录下的nginx.conf,当修改完配置文件后不需要重启nginx即可重载配置信息:

# 在nginx已开启的前提下,重载配置文件
nginx -s reload
​
# 检查配置文件是否有语法错误
nginx -t

5.2 Linux

linux上安装Nginx需要用到gcc环境,关于gcc环境的安装升级可参考Linux讲义;

1、安装所需依赖库

yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、使用文件上传工具,上传Nginx安装包,演示使用的是1.24.0版本

3、解压缩安装包

tar -zxvf nginx-1.24.0.tar.gz

4、进入解压后的目录文件

cd nginx-1.24.0
​
# 查看目录中的文件
ll

5、执行目录中的 configure 脚本文件,生成 Makefile 安装文件。

./configure
​
# 执行完后再次查看目录文件
ll

6、编译安装

# 执行Makefile文件
make
​
# 编译安装
make install

7、启动Nginx,默认会将Nginx安装到 /usr/local/nginx 目录下

启动程序在 sbin 目录中

5.3 常用命令

#下列命令许切换到nginx主启动程序所在目录下执行操作:
./nginx             # 正常启动(Windows和Linux共用)
./nginx -s stop     # 非安全退出(Windows和Linux共用)
./nginx -s quit     # 安全退出(Windows和Linux共用)
./nginx -s reload   # 不需要重启,重新加载配置文件(Windows和Linux共用)
./nginx -t          # 检查配置文件有无语法错误(Windows和Linux共用)
./nginx -v          # 查看版本号(Windows和Linux共用)
ps aux|grep nginx   # 查看nginx进程(Linux使用)

6 配置文件

6.1 配置总览

Nginx的配置文件默认在安装根目录下的conf目录下,名为nginx.conf 文件

nginx的配置文件有固定的格式布局,分为不同的模块:

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

配置文件模块预览:

...              #全局块
 
events {         #events块
   ...
}
 
http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

Nginx配置详解官网(可惜是全英文的):nginx documentation

下面是搜集的一些大佬们写的文章,写的相对比较全面详细,可供参考:

Nginx 配置详解-CSDN博客

Nginx 配置详解-腾讯云开发者社区-腾讯云

https://www.cnblogs.com/hanease/p/15890509.html

6.2 常见配置

以下针对每个块列举一些常见配置内容。

配置文件中路径的书写说明:

  • 路径开头不是/ 时,会从nginx的安装目录下寻找资源

  • 如果路径开头是 / ,属于Linux系统配置,代表系统根目录

  • Windows系统下的绝对路径,需指定具体盘符,如:D:/www/html/...

6.2.1 全局块配置

#全局配置-------------------------------------------------------------
#指定nginx运行的用户及用户组,默认为nobody(任意的)
#user  nobody nobody;

#开启线程数,最大值可设逻辑CPU核数
worker_processes  1; # 值为auto时,代表与当前cpu物理核心数一致

#定位全局错误日志文件,级别以notice显示,还有debug,info,warn,error,crit模式,debug输出最多,crir输出最少,根据实际环境而定
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定进程id的存储文件位置
#pid        logs/nginx.pid;

#指定一个nginx进程打开的最多文件描述符数目,受系统进程的最大打开文件数量限制
#worker_rlimit_nofile 65535
#指定 worker 子进程异常终止后的 core 文件,用于记录分析问题。
#worker_rlimit_core 50M; # 存放大小限制
#working_directory /opt/nginx/tmp; # 存放目录

#指定 Nginx 的运行方式,前台还是后台,前台用于调试,后台用于生产。
#daemon off;# 默认是on,后台运行模式

#envents 配置----------------------------------------------------------
events {
    ...
}

#http 配置-------------------------------------------------------------
http {
    ...
}

6.2.2 event块

配置影响 nginx 服务器与客户端的网络连接,包括进程最大连接数,数据驱动模型,序列化等

events {
    #设置工作模式为epoll,windows使用时,不用配。默认值即可
    use epoll;
    #定义每个进程的最大连接数,受系统进程的最大打开文件数量限制
    worker_connections  1024;
    #设置Nginx网络连接序列化,让Nginx在处理连接任务时,一个个唤醒,防止出现进程对连接进行争抢。
    accept_mutex on;
    #设置是否允许同时接收多个网络连接,打开后可提高效率。
    multi_accept on;
}

event处理类型有:

  • AIO(异步IO)

  • /dev/poll(Solaris 和Unix特有)

  • epoll(Linux特有)

  • eventport(Solaris 10特有)

  • kqueue(BSD特有)

  • poll,rtsig(实时信号),select等。

惊群现象:

多个进程或者线程在等待同一个事件,当事件发生时,所有进程或者线程都会被内核唤醒。然后,通常只有一个进程获得了该事件,并进行处理;其他进程在发现获取事件失败后,又继续进入了等待状态。这在一定程度上降低了系统性能。
通过设置 accept_mutex on 可有效避免Nginx出现惊群现象。

6.2.3 http全局块

http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

http {
    #主模块指令,引入某个文件的配置到该文件中,可以减少主配置文件的复杂度
    include       mime.types;
    
    #核心模块指令,默认设置为二进制流,也就是当内容类型未定义时使用这种方式
    default_type  application/octet-stream;
    
    #定义日志格式,main为该日志格式的名称,可自行设置,后面使用该名称即可
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #引用日志main格式,并指定日志输出位置
    access_log  logs/access.log  main;
​
    #设置允许客户端请求的最大的单个文件字节数
    client_max_body_size 20M;
    #指定来自客户端请求头的headebuffer大小
    client_header_buffer_size  32k;
    #指定连接请求试图写入缓存文件的目录路径
    client_body_temp_path /dev/shm/client_body_temp;
    #指定客户端请求中较大的消息头的缓存最大数量和大小,目前设置为4个32KB
    large client_header_buffers 4 32k;
​
    #开启高效文件传输模式
    sendfile        on;
    #开启防止网络阻塞,必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输'效率'
    tcp_nopush     on;
    #开启防止网络阻塞,该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性'
    tcp_nodelay    on;
​
    #设置客户端连接保存活动的超时时间
    #keepalive_timeout  0; # 无限时间
    keepalive_timeout  65;
​
    #设置客户端请求读取header超时时间
    client_header_timeout 10;
    #设置客户端请求body读取超时时间
    client_body_timeout 10;
​
    #HttpGZip模块配置
    #开启gzip压缩
    gzip  on;
    #设置允许压缩的页面最小字节数
    gzip_min_length 1k;
    #申请4个单位为16K的内存作为压缩结果流缓存
    gzip_buffers 4 16k;
    #设置识别http协议的版本,默认为1.1
    gzip_http_version 1.1;
    #指定gzip压缩比,1-9数字越小,压缩比越小,速度越快
    gzip_comp_level 2;
    #指定压缩的类型
    gzip_types text/plain application/x-javascript text/css application/xml;
    #让前端的缓存服务器进过gzip压缩的页面
    gzip_vary on; 
    
    # server配置
    server {
        
    } 
    # 允许有多个server配置,一个server相当于一个服务主机
}

6.2.4 server块

这块和虚拟主机有密切关系,虚拟主机从用户角度来看跟一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块分为全局 server 块,以及多个 location 块,每个location代表虚拟主机中的应用程序。

server {
    #单连接请求上限次数
    keepalive_requests 120; 
    
    #监听端口,当用户访问80端口时,即访问nginx
    listen       80;
    
    #服务地址,可以是ip,最好是域名,用户使用该地址名访问nginx
    server_name  111.222.333.123;
    #server_name  www.123.com;
    
    #设置访问的语言编码
    charset utf-8;
    
    #设置虚拟主机访问日志的存放路径及日志的格式为main
    access_log  /www/wwwlogs/111.222.333.123.log main; #响应日志
    error_log  /www/wwwlogs/111.222.333.123.log main; #错误日志
    
    # location块,可配置多个
    location url匹配规则{
        ......
    }
    
}

关于端口号:

一般情况下会让nginx监听80端口,因为浏览器在发出请求时,如果不指定端口号默认访问80端口。

例如,服务器的IP地址为11.22.33.44,在此服务器上安装了nginx,并监听80端口。此时用户只需在浏览器上输入IP地址即可访问到nginx服务,不需要这样 11.22.33.44:80

如果你有域名,一般域名解析后只能得到IP地址,是不包含端口号的。因此通过域名访问服务器时,实际上访问的是该服务器的80端口。

关于server_name的配置:

# 可同时配置多个服务地址,通过空格隔开
server_name name1 name2 name3
​
# 示例:(这些域名都需要有效,且解析得到的IP地址是同一个)
server_name www.nginx.com www.zzy.com www.lion.cn

域名匹配的四种写法:

  • 精确匹配: server_name http://www.nginx.com

  • 左侧通配: server_name *.http://nginx.com

  • 右侧统配: server_name www.nginx.*

  • 正则匹配: server_name ~^www\.nginx\.*$

匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配

6.2.5 location块

一个 server 块中可以配置多个 location 块。

主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

root和index配置
server{
    listen       80;
    server_name  localhost;
    
    location /image {
        root /www/static;   # 配置资源根
        index  index.html;  # 配置首页
    }
}

访问 http://localhost/image 时,会访问 /www/static/image/index.html 资源。

访问 http://localhost/image/logo.jpg 时,会访问 /www/static/image/logo.jpg 资源。

root配置项配置的是资源根目录,在实际寻找资源时:root路径 + uri完整资源路径

alias配置
server{
    listen       80;
    server_name  localhost;
    
    location /image {
        alias /www/static/; # 配置资源别名
    }
}

访问 http://localhost/image/logo.jpg 时,会访问 /www/static/logo.jpg 资源。

alias配置项相当于重定向请求(得到新资源地址,重新请求)。新的url路径为:alias路径 + uri资源路径后续(去掉匹配前缀)

alias在配置时,结尾必须添加/ ,且该该配置项只能在location块中使用。

路径匹配规则
location [ = | ~ | ~* | ^~ ] uri {
    ...
}

匹配规则:

  • = 精确匹配;

  • ~ 正则匹配,区分大小写;

  • ~* 正则匹配,不区分大小写;

  • ^~ 匹配到即停止搜索(不常用);

  • 不带任何字符属于默认模式,也是正则匹配,但优先级最低。

匹配优先级: = > ^~ > ~ > ~* > 不带任何字符。

~和~*关于大小写区分的特殊说明:
在Windows系统中,系统本身是不区分大小写的。比如,在一个目录下新建同名但大小写不同的两个文件时【hello.txt、Hello.txt】会提示由于名称相同无法创建。这是操作系统本身的字符特性导致的,因此Windows版本的Nginx无法采用取分大小写的配置方式,即~和~*效果一致。Mac操作系统亦是如此。
而在Linux操作系统中,就可以区分了!

location块内的配置项说明:

    #设置服务基本信息
    #请求的url匹配,可设置精准匹配或正则匹配
    #~为区分大小写,~*为不区分大小写
    location  ~* /user {
        #根目录
        root html;  
        #设置默认页
        index  index.html index.htm;
        #拒绝的ip,黑名单
        deny 127.0.0.1;  
        #允许的ip,白名单
        allow 172.18.5.54; 
    } 
    
    location ~*^.+$ {
        #根目录
        root html;  
        #设置默认页
        index  index.html index.htm;
        #拒绝的ip,黑名单
        deny 127.0.0.1;  
        #允许的ip,白名单
        allow 172.18.5.54; 
    } 
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    #图片资源配置
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        # 资源缓存时间30天
        expires      30d;
        error_log /dev/null;
        access_log off;
    }
    
    #网站js与css资源配置
    location ~ .*\.(js|css)?$
    {
        # 资源缓存时间12个小时
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    
    #访问异常页面配置
    error_page  404              /404.html;
    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

7 全局变量

Nginx配置文件中基础的内置变量引用名,可以在配置时使用下列变量代替该值。

$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$request_method : 客户端请求的动作,通常为GET或POST。
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri : 不包含请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri : 与$uri相同。
$query_string 
$args : 这个变量等于请求行中的参数,同$query_string
$document_root : 当前请求在root指令中指定的值。
$limit_rate : 这个变量可以限制连接速率。
$request_body_file 
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。

8 配置案例

8.1 反向代理简单配置

server {
    listen          80;
    server_name     localhost;
​
    location /server1 {
        proxy_pass http://127.0.0.1:9001/;
    }
    location /server2 {
        proxy_pass http://127.0.0.1:9002/;
    }
    location /server3 {
        proxy_pass http://127.0.0.1:9003/;
    }
}

8.2 负载均衡简单配置

默认轮训

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除

# 在http块中的全局块中配置
# upstream固定写法 后面的myserver可以自定义
upstream myserver{
    server 192.168.80.102:8081;
    server 192.168.80.102:8082;
}
​
# server配置
server {
    # 监听80端口
    listen 80;   
    #location块
    location / {
    # 反向代理到上面的两台服务器 写上自定义的名称
        proxy_pass http://myserver;
    }
}

weight权重

weight 代表权重默认为 1,权重越高被分配的客户端越多

upstream myserver { 
    server 192.168.80.102:8081 weight=1 ;
    server 192.168.80.102:8082 weight=2 ;
}
server {  
    listen       80;  
    location / {
    proxy_pass http://myserver; 
}

ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题

#配置负载均衡的服务器和端口
upstream myserver { 
    server 192.168.80.102:8081;
    server 192.168.80.102:8082;
    ip_hash;
}
server {  
    listen       80;  
    location / {
    proxy_pass http://myserver; 
   }
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

#配置负载均衡的服务器和端口
upstream myserver {   
    server 192.168.80.102:8081;
    server 192.168.80.102:8082;
    fair;
}
server {  
    listen       80;   
    location / {
        proxy_pass http://myserver; 
    }    
}

使用上述配置会导致报错,原因是 fair 不是Nginx内置的模式,需要加载第三方模块 教程

9 总结

Nginx的用法还有非常多,比如实现动静分离、跨域请求、请求重定向、缓存集成等等。每种用法都会涉及到一块知识点,需要大家在实际的工作使用中,慢慢摸索总结。网上找到的相对完整的两个系列教程:

https://blog.csdn.net/weixin_43994244/category_12274391.html

https://blog.csdn.net/qq_39399966/category_9423219.html

常见应用场景:

  1. 静态文件服务:Nginx在提供静态资源服务方面效率很高,可以快速的响应大量的静态请求,减轻其他动态服务器的负担,如CSS、JavaScript、Image、Audio和Video文件等。

  2. 反向代理和负载均衡:Nginx可以作为反向代理服务器,通过优化请求的分配和处理方式,可以平均分配后端服务器的负载,提高系统的可用性和可靠性,使其更稳定。

  3. 缓存服务器:Nginx可以缓存一些响应结果,降低后端服务器的负载,提高数据的访问速度,平衡访问压力等。

  4. SSL加速:Nginx 可以通过 HTTPS 访问加速,提高 HTTPS 访问的性能,减少SSL负载压力,保证数据的安全性。

  5. WebSocket:Nginx也支持WebSocket协议,可用于实时通信应用程序。

  6. 访问控制和安全:Nginx可以使用访问控制、基于IP地址的访问限制等来提高服务器的安全性,有效保护Web应用程序和服务器。

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值