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 反向代理![](https://img-blog.csdnimg.cn/direct/f72f474e827147eab2e4f596b532ffa7.png)
-
正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看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
下面是搜集的一些大佬们写的文章,写的相对比较全面详细,可供参考:
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
常见应用场景:
-
静态文件服务:Nginx在提供静态资源服务方面效率很高,可以快速的响应大量的静态请求,减轻其他动态服务器的负担,如CSS、JavaScript、Image、Audio和Video文件等。
-
反向代理和负载均衡:Nginx可以作为反向代理服务器,通过优化请求的分配和处理方式,可以平均分配后端服务器的负载,提高系统的可用性和可靠性,使其更稳定。
-
缓存服务器:Nginx可以缓存一些响应结果,降低后端服务器的负载,提高数据的访问速度,平衡访问压力等。
-
SSL加速:Nginx 可以通过 HTTPS 访问加速,提高 HTTPS 访问的性能,减少SSL负载压力,保证数据的安全性。
-
WebSocket:Nginx也支持WebSocket协议,可用于实时通信应用程序。
-
访问控制和安全:Nginx可以使用访问控制、基于IP地址的访问限制等来提高服务器的安全性,有效保护Web应用程序和服务器。