通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离、高可用Nginx6功能,并实现Nginx的原理进一步分析。当需要使用Nginx配置文件时,参考本文示例即可。1.正向代理正向代理的代理对象是客户端。正向代理是指代理服务器为客户端访问目标服务器。1.1实战1实现效果:在浏览器中输入www.google.com,浏览器会跳转到www.google.com。具体配置:server{resolver8.8.8.8;listen80;location/{proxy_passhttp://$http_host$request_uri;}}在需要访问外网的客户端上,执行以下操作之一:1.方法一(推荐)exporthttp_proxy=http://你的正向代理服务器地址:代理端口2方法2vim~/.bashrcexporthttp_proxy=http://你的正向代理服务器地址:代理端口2反向代理反向代理是指proxy后端服务器响应客户端请求的中间服务器,代理的对象是服务器。2.1实战1的实现效果:在浏览器中输入www.abc.com,从nginx服务器跳转到linux系统中tomcat的主页面。具体配置:server{listen80;server_name192.168.4.32;#监听地址位置/{roothtml;#/html目录proxy_passhttp://127.0.0.1:8080;#请求重定向到indexindex.htmlindex.htm;#设置默认页面}}2.2实战2实现效果:根据浏览器输入的不同路径,跳转到不同端口的服务。具体配置:server{listen9000;server_name192.168.4.32;#监听地址location~/example1/{proxy_passhttp://127.0.0.1:5000;}location~/example2/{proxy_passhttp://127.0.0.1:8080;}}location指令说明:~:表示uri包含正则表达式,区分大小写。~*:表示uri包含正则表达式,不区分大小写。=:表示uri不包含正则表达式,需要严格匹配。3负载均衡3.1实战1实现效果:在浏览器地址栏输入http://192.168.4.32/example/a.html,平均到5000和8080端口,实现负载均衡效果。具体配置:upstreamserver{server192.167.4.32:5000;server192.168.4.32:8080;}server{listen80;#监听端口server_name192.168.4.32;#监听地址位置/{roothtml;#html目录索引index.htmlindex.htm;#设置默认页面proxy_passhttp://myserver;#请求到myserver定义的服务器列表}}nginx分配服务器策略轮询(默认)按照请求的时间顺序逐一分配。如果服务器宕机,可以自动清除。权重越高,分配的客户端越多,默认为1。例如:upstreammyserver{server192.167.4.32:5000weight=10;服务器192.168.4.32:8080权重=5;}复制代码ip根据请求的ip的hash值分配,每个访问者访问一台后端服务器。例如:上游myserver{ip_hash;服务器192.167.4.32:5000;服务器192.168.4.32:8080;}复制代码fair根据后端服务器的响应时间分配,响应时间短的请求优先。例如:上游myserver{fair;服务器192.168.4.32:5000;服务器192.168.4.32:8080;}4.Nginx缓存4.1实战1的实现效果:3天之内,通过浏览器地址栏访问http://192.168.4.32/a.jpg,不会从服务端拉取资源,会从服务端重新下载服务器在3天后(已过期)。具体配置:#http区添加缓存区配置proxy_cache_path/tmp/nginx_proxy_cachelevels=1keys_zone=cache_one:512minactive=60smax_size=1000m;#server区添加缓存配置位置~\.(gif|jpg|png|htm|html|css|js)(.*){proxy_passhttp://192.168.4.32:5000;#如果没有缓存,转向请求proxy_redirectoff;proxy_cachecache_one;proxy_cache_valid2001h;#为不同的HTTP状态码设置不同的缓存时间proxy_cache_valid5001d;proxy_cache_validany1m;expires3d;}expires是为一个资源设置一个过期时间。通过设置expires参数,浏览器可以缓存过期时间之前的内容,减少服务器与服务器之间的请求和流量。也就是说不需要去服务器验证,直接通过浏览器本身就可以确认是否过期,所以不会产生额外的流量。这种方法非常适合不经常更改的资源。五、动静分离5.1实战1成就:通过浏览器地址栏访问www.abc.com/a.html,访问静态资源服务器的静态资源内容。通过浏览器地址栏访问www.abc.com/a.jsp,访问动态资源服务器的动态资源内容。具体配置:upstreamstatic{server192.167.4.31:80;}upstreamdynamic{server192.167.4.32:8080;}server{listen80;#监听端口server_namewww.abc.com;监听地址#拦截动态资源位置~.*\.(php|jsp)${proxy_passhttp://dynamic;}#拦截静态资源位置~.*\.(jpg|png|htm|html|css|js)${root/data/;#html目录proxy_passhttp://static;autoindexon;;#自动打开文件列表}}6.高可用通常通过nginx主服务器访问后台目标服务集群。当主服务器挂掉后,会自动切换到备份服务器,备份服务器将作为主服务器的角色访问后端目标服务器。6.1实战实现效果1:准备两台nginx服务器,通过浏览器地址栏访问虚拟ip地址,停止主服务器上的nginx,再次访问虚拟ip地址仍然有效。具体配置:(1)在两台nginx服务器上安装keepalived。keepalived相当于一条路由。它使用一个脚本来检测当前服务器是否还活着。如果还活着,则继续访问,否则切换到另一台备份服务器。#installkeepalivedyuinstallkeepalived-y#查看版本rpm-q-akeepalivedkeepalived-1.3.5-16.el7.x86_64(2)修改主服务器/etc/keepalived/keepalivec.conf配置文件(可直接替换),完成来自配置的高可用性主机。keepalived将nginx服务器绑定一个虚拟ip,nginx高可用集群对外暴露这个虚拟ip,客户端通过访问这个虚拟ip来访问nginx服务器。global_defs{notification_email{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from_Alexandre.Cassen@firewall.locsmtp_server192.168.4.32smtp_connect_timeout30router_idLVS_DEVEL#在rretc/hosts文件中,我们可以通过pp_的http_script访问host的配置在rretc/hosts文件中。script"/usr/local/src/nginx_check.sh"interval2#检查脚本执行的时间间隔weight2#每次加2个权重}vrrp_instanceVI_1{interfaceens7f0#网卡,需要修改stateMASTER#在备份服务器上,改MASTERtoBACKUPvirtual_router_id51#主备机的virtual_router_id必须相同priority100#主备机优先级不同,主机值大,备机值小advert_int1#每次发送心跳多长时间(default1s)检测服务器是否还活着authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.1.100#VRRPH虚拟地址,可以绑定多个}}字段说明router_id:配置在/etc/hosts文件中,通过它我们可以访问我们的主人。127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6127.0.0.1LVS_DEVELcopycodeinterval:设置脚本执行权重的间隔时间:当脚本执行失败,即keepalived或者nginx挂了,权重增加的值(可能是负数)。interface:输入ifconfig命令查看当前网卡名称是什么。ens7f0:flags=4163
