1.简介
本篇博文是《nginx实现动态/静态文件缓存-技术流ken》的二部曲。将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例。
反向代理--“反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。”
负载均衡--“网络专用术语,负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。”
2.nginx实现反向代理
1.几个概念
反向代理:在收到客户端请求之后,会修目标IP地址和端口
正向代理:在收到客户端请求之后,会修源IP地址和端口
上游服务器:代理服务器后端的哪些真正给客户端提供服务的节点,这样的服务器称之为上游服务器
下游服务器:客户端就是下游节点
2.反向代理指令
模块:nginx_http_proxy_module指令proxy_pass:指定上游服务器的ip和端口proxy_set_header:指定在重新封装请求报文的时候,添加一个新的首部Syntax:proxy_passURL;Default:—Context:location,ifinlocation,limit_except例子:proxy_passhttp://10.220.5.200:80;Syntax:proxy_set_headerfieldvalue;Default:proxy_set_headerHost$proxy_host;Context:http,server,location
3.反向代理简单示例
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}
4.反向代理实战案例
1.环境准备
centos7.5
反向代理服务器IP:172.20.10.7/28
web1服务器IP:172.20.10.8/28
web2服务器IP:172.20.10.9/28
2.配置反向代理服务器端
yum安装nignx需要配置网络源,复制下面的代码到你的yum仓库中
[ken]name=kenenabled=1gpgcheck=0baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
安装nginx
[root@ken~]#yuminstallnginx-y
配置nginx文件,我们实现这样一个效果,静态文件都被代理到172.20.10.8,动态文件都被调度到172.20.10.9,实现动静分离。
[root@ken~]#vim/etc/nginx/nginx.conf#Formoreinformationonconfiguration,see:#*OfficialEnglishDocumentation:http://nginx.org/en/docs/#*OfficialRussianDocumentation:http://nginx.org/ru/docs/usernginx;worker_processesauto;error_log/var/log/nginx/error.log;pid/run/nginx.pid;#Loaddynamicmodules.See/usr/share/nginx/README.dynamic.include/usr/share/nginx/modules/*.conf;events{worker_connections1024;}http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_log/var/log/nginx/access.logmain;sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;types_hash_max_size2048;include/etc/nginx/mime.types;default_typeapplication/octet-stream;#include/etc/nginx/conf.d/*.conf;server{listen80default_server;listen[::]:80default_server;server_name_;root/var/www/html;indexindex.htmlindex.php;#Loadconfigurationfilesforthedefaultserverblock.location/{proxy_passhttp://172.20.10.8;proxy_set_headerhost$proxy_host;proxy_set_headerrealip$remote_addr;}location~^/.*(\.php)${proxy_passhttp://172.20.10.9;proxy_set_headerhost$proxy_host;proxy_set_headerrealip$remote_addr;}error_page404/404.html;location=/40x.html{}error_page500502503504/50x.html;location=/50x.html{}}}
进行语法检测
[root@ken~]#nginx-tnginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisoknginx:configurationfile/etc/nginx/nginx.conftestissuccessful
检查没有问题之后进行重启
[root@ken~]#systemctlstartnginx
3.配置web服务器端
安装apache
[root@ken~]#yuminstallhttpd-y
准备测试文件,172.20.10.8准备静态文件
[root@ken~]#echo"thisis172.20.10.8forstatictest">/var/www/html/index.html
172.20.10.9需要下载php以便支持动态文件
[root@kenhtml]#yuminstallphp-y
172.20.10.9准备动态文件,
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}0
4.web服务器重启
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}1
5.关闭安全服务
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}2
6.浏览器测试
请求静态文件测试
静态文件请求已经成功转发至172.20.10.8。
测试成功!
请求动态文件测试
动态文件请求已经成功转发至172.20.10.9.
测试成功!
7.补充
补充一
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}3
补充二
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}4
补充三
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}5
3.nginx实现负载均衡
1.几个概念
调度器:分发用户的请求到一个后端节点
上游服务器(真实服务器):每个真正用来处理用户请求的节点都是一个上游服务器
CIP:客户端的IP地址
RIP:真实服务器的IP地址
VIP:虚拟IP,用户所看到的是也是虚拟IP
2.指令
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}6
3.重要参数
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}7
4.nginx实现负载均衡实战案例
1.环境准备
centos7.5
nginx服务器IP:172.20.10.7/28
web1服务器端IP:172.20.10.8/28
web2服务器端IP:172.20.10.9/28
2.配置nginx服务器端
安装nginx略
配置nginx文件
location/{proxy_passhttp://10.220.5.180;proxy_set_headerX-Real-IP$remote_addrproxy_set_headerHost$proxy_host;}8
语法检测
[root@ken~]#nginx-tnginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisoknginx:configurationfile/etc/nginx/nginx.conftestissuccessful
重启nginx
[ken]name=kenenabled=1gpgcheck=0baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/0
3.配置web服务器端
略.和上面反向代理配置一样。
4.浏览器测试
输入nginx服务器端的IP地址
因为172.20.10.9的权重为2,即出现两次172.20.10.9才会出现一次172.20.10.8.进行刷新测试
测试成功!
nginx的三大功能,缓存,反向代理,负载均衡,已经全部讲解完毕,是否对nginx有了全新的认识那?马上自己动手实验一下吧