第五章 Web服务器搭建(略)

第六章 负载均衡与缓存
1 正向代理与反向代理
1)安全性。正向代理的客户端能够在隐藏自身的同时访问任意网站,这给网络安全带来了极大的威胁。反响代理的客户端只能通过外网来访问代理服务器,并且用户不知道自己访问的是一个代理服务器,好处是反向代理将真正的处理放在内网中,有效的提高了网络的安全性。
2)功能性。正向代理的主要途径是为在防火墙内的局域网用户提供访问Internet的途径。而反向代理的主要途径是将防火墙上的服务器提供给Internet用户访问,还可以为多个后端服务器提供负载均衡功能、缓存功能。

2 反向代理配置
1)准备服务器
192.168.78.3 192.168.78.128 192.168.78.200

2)配置反向代理

编辑hosts文件,添加以下内容:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx


配置nginx.conf,添加以下内容

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx_02


完成上述配置后,当用户请求http://test.ng.test或者http://test,web.com时就会被反向代理服务器转发到后端的Web服务器192.168.78.128 或 192.168.78.200中进行处理3)其他常用反向代理指令

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_03


示例:将客户端ip传递给后端服务器

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_04


windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_05


3 负载均衡:将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,更用户带来更好的体验。

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_06


3.1 负载均衡的配置

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_07


1)一般轮询负载均衡

a) 三台服务器:192.168.78.3 192.168.78.128 192.168.78.200

b)配置一般轮询负载均衡

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_08


解释:第六行用于自定代理的url。upstream指令后的web_server表示代理的服务器主机名,用于第六行的proxy_pass指令执行反向代理时使用,第11-12行利用server指令在upstream块中配置了后端web服务器,这些服务器可以有多个或一个

2)加权轮询负载均衡
解释:四次请求会有三次在192.168.78.200中执行(三次执行的顺序并不连续,而是按照算法分散执行),一次在192.168.78.128中执行

weight以外的常用参数:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_09


示例:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_10


关闭 128和200后访问http://test.ng.test,访问将会在201上执行。如果去掉备份服务器,再次访问将会出现如下错误:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_11


3)ip_hash负载均衡

将每个请求按照访问IP的hash结果分配,这样就可以使来自同一个IP的客户端用户固定访问一台web服务器,有效的解决了动态网页存在的session共享问题。示例如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_12


解释:ip_hash用于标识当前负载均衡的处理方式,对于一个暂时性宕机的服务器,可以使用down标识出来,负载均衡时会忽略该服务器。

注意:在使用ip_hash方式负载均衡时,不能使用weight和backup方式设置

4)利用第三方模块fair

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_13


4 缓存配置

1)缓存原理:Web缓存服务器位于web服务器和客户端之间,当用户访问一个URL时,Web服务器会请求相应的内容源Web服务器,并将相应的内容缓存在内存或硬盘中。然后,当下一个到来时,如果是相同的url,缓存服务器会直接将缓存的内容返回给用户,而不会再次向web服务器发送请求。

2)永久缓存配置
a)服务器:

192.168.78.3 192.168.78.128
 server{
 listen 80;
 server_name 192.168.78.3;
 location / {


root cache;//指定缓存文件的保存目录,这里将其设定在Nginx安装目录下的cache目录中,需要手动创建,创建后修改此目录的权限,要求于Nginx工作进程的用户相同(如nobody);

proxy_store on;//开启本地缓存
 proxy_store_access user:rw group:rw all:r; //设置缓存读写规则
 proxy_temp_path cache_tmp;//设置反向代理时接收的数据临时文件的目录,该目录会由Nginx在配置生效后自动创建。
 proxy_pass http://192.168.78.128;
 }
 }

注意:上述配置虽然能够将文件缓存到本地,但是客户每次请求,nginx仍会向后端服务器获取文件。为避免此种情况,还需先判断缓存文件是否存在,具体配置如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_14


!-e表示检查一个文件是否存在,当不存在时就执行{}中的命令。其中内置变量windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_15request_filename为/test/index.htm,如果缓存中没有请求的缓存文件,Nginx将会到http://192.168.78.128/test/index.html中寻找资源相应用户,并缓存文件。3)临时缓存配置

a)服务器:192.168.78.3 192.168.78.128

b)缓存配置

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx_16


解释:第二行指令用户设置缓存服务器(192.168.78.3)接收内容源服务器相应内容时使用的临时目录。第四行指令用户设置缓存目录。其中proxy_cache_path指令相关含义如下:

/usr/local/nginx/proxy_temp_dir参数:表示用户自定义的缓存文件保存目录。

levels参数:表示缓存目录下的层级目录结构,它是根据哈希后的请求URL地址创建的,目录名称从哈希后的字符串结尾处开始截取。

keys_zone参数:指定缓存区的大小及名称。cache_one:50m表示缓存区名称为cache_one,大小为50m。

inactive参数:表示主动清空在指定时间内未被访问的缓存,1m表示一分钟内。

max_size参数,表示指定磁盘空间大小,如500m

c)在server块中添加临时缓存的配置如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_17


解释:第13-16行设置,通过proxy_cache_valid指令对不同的HTTP状态码设置不同的缓存时间,该指令的第一个参数表示状态码,第二个参数表示缓存时间。

proxy_cache_key指令参数的具体内置变量说明如下:

$host:服务器的域名,如test.ng.test

$uri:域名和参数之间的部分,如/index.html

$is_args:有URL参数时,则值为?,否则为空字符串

KaTeX parse error: Expected 'EOF', got '&' at position 18: …gs:保存URL参数,如a=1&̲b=2,没有参数时为空字符串 …is_args和$args,可以实现根据不同URL参数缓存不同文件为了便于在浏览器中查看是否正确缓存,第5-6行通过add_header指令添加了两个响应消息头。其中X-Via表示服务器地址,利用内置变量windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_18upstream_cache_status获取。$upstream_cache_status的返回值有7个如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_19


注意:仅在处理成功的情况下,才会在浏览器的响应头中看到add_header指令设置的响应头

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_20


d)常用缓存配置指令

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_21


4)缓存清理配置

a>下载安装ngx_cache_purge

下载地址:https://githu.com/FRiCKLE/ngx_cache_purge/releases 下载完成后上传至root目录,并重命名为ngx_cache_purge,指令如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_22


在./configure时添加对nginx-cache-purge模块的支持,完成Nginx编译选项的配置,命令如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_23


b>配置缓存清理功能

安装ngx_cache_purge模块后,就可以使用该插件的指令实现缓存清理。使用时有如下规则:

》指定的缓存区名称要与proxy_cache_path指令中出现的缓存区名称一致

》指定的key值组成规则,要与proxy_cache_key指令设置的规则相同。

》清理缓存的location编写位置,要在server块中所有location之前,防止其他正则location提前匹配。

nginx.conf配置如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx_24


上述第一行,用于以正则表达式匹配用户的请求,请求地址符合/purge/url形式时,就会清理URI对应的缓存文件。第2-3行用于指定允许清理缓存的客户端,此处表示仅允许IP地址为192.168.78.1的客户端清理缓存。第4行通过proxy_cache_purge指令,指定名称cache_one的缓存区,和待清理缓存文件的key值组成规则。其中,windows nginx 服务高可用实现 nginx高性能web服务器实战教程_负载均衡_25uri5 邮件服务

1)邮件服务相关模块

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx_26


在邮件代理服务配置前,首先重新编译安装Nginx,添加对邮件的支持,主要配置指令如下:

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_27


解释:–with-mail用于安装上表中前六种邮件模块,表示允许POP3,IMAP和SMTP代理,–with-mail-ssl-module表示使用安全模式传输模式完成邮件服务。按照上述配置后,再执行make && make install重新安装编译。完成上述操作后,即可在Nginx的配置文件中进行邮件配置。

2)常用邮件配置方式

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_缓存_28


windows nginx 服务高可用实现 nginx高性能web服务器实战教程_nginx_29


解释:第三行用于指定Nginx提供邮件代理服务器时的HTTP认证服务器地址。第五行用来配置Nginx服务器代理缓存的大小。

windows nginx 服务高可用实现 nginx高性能web服务器实战教程_服务器_30