Nginx反向代理及实践应用

集群介绍

就是有很多台计算机在干同一件事,原来一台的电脑压力太大,干不完一件事情的时候,让多台来干同一件事,能分散压力,组合在一起叫做集群,那么集群能力组合绝对超过单一的 相加。

在这里插入图片描述

左边是普通用户 ,右边是运维人员 ,用户首先它通过Internet到了公司,这个时候它到公司的网关,通过防火墙跳转到主的负载均衡上,旁边是个备份的,根据算法扔到web服务器了,web服务器lnmp,动态的网页php会去找数据库,找数据库的主库,(主库也是单点),旁边是备份的,写找主服务器,读找从服务器前面的从库读的负载均衡器(负载均衡器也是单点,所以旁边也有一个备份),一般情况下我们搭建好主从复制之后,给开发一个读和写的账号,开发自己写代码来实现读写分离(这是开发写的,开发写一个脚本指名写的时候找那个ip地址,读的时候找那个ip地址),这样就能实现读写分离。
如果主库写数据的时候承受不住压力的话,那么数据库缓存(memcached缓存),比如读一个数据开发可以不先找负载均衡器先找memcached缓存,如果在缓存找不着,读的数据找不到,开发再找LVS(写一个if判断),从mysql读出来的数据,往写一份到memcached缓存里,然后在交给nginx,nginx在返回给用户,如果下一次用户访问的是同一个数据,那么php先默认会找缓存,不找后面了,然后就缓解数据库的从压力,一般memcached缓存的是从库的读压力。(memcached缓存现在快用不到了)。
右边得到备份的数据库写了一个定时全备及增量备份到备份服务器(backup)
NFS服务器实时同步。
运维人员通过vpn公网条过去,秘密通道的后面有个跳板机,然后跳到管理服务器,通过管理服务器能够操作里面的服务器

集群架构功能和结构可以分为以下几类:
  • 负载均衡集群,简称LBC或者LB
  • 高可用性集群,简称HAC (预防单点)
  • 高性能计算集群,简称HPC
  • 网格计算集群

负载均衡器的作用:

用户的请求去找负载均衡器,负载均衡器按照一定的机制,将用户的请求分发给多台web服务器,用户的访问让多台web分担压力了(负载均衡器是单点的,所以我们要做个备份,做备份用keeplived软件
在这里插入图片描述

互联网企业常用的开源集群软件有:Nginx,LVS,Haproxy,Keepalived,heartbeat。
(后面俩个是高可用的)
互联网企业常用的商业集群硬件有:F5,Netscaler,Radware,A10等(他们是收费的)

集群硬件Netscaler
在这里插入图片描述

集群硬件F5
在这里插入图片描述

集群硬件Radware
在这里插入图片描述
集群硬件A10
在这里插入图片描述

nginx反向代理

nginx是用反向代理来实现七层的负载均衡,所以一个是LVS和Nginx都有负载均衡的功能

在这里插入图片描述
nginx:通过http协议的http是OSI模型中七层的负载均衡,实现的功能多 nginx收到用户请求就断了,nginx代替用户发起请求,发起一个全新请求的url,跟用户没啥关系url的源ip和源mac都是nginx自己,web的日志记录的ip都是nginx自己的解决web日志记录自己的ip如何让显示用户的真实ip地址nginx反向代理实现分业务,通过过滤location(static、upload、/)找不同的池子,池子与池子的内容是不一样的

在这里插入图片描述
lvs:是OSI模型中4层的负载均衡,uri的请求通过转发数据包(通过修改MAC头部是速度最快的),tcp三次握手是和web服务器握的,lvs但是效率好,实现功能小

注意:
一句话,LVS等的负载均衡是转发用户请求的数据包,而Nginx反向代理是接收用户的请求然后重新发起请求去请求其后面的节点。

在这里插入图片描述

部署nginx服务

[root@localhost conf]# yum -y install openssl openssl-devel pcre pcre-devel
[root@localhost conf]# tar xf nginx-1.10.2.tar.gz -C /usr/src/
[root@localhost conf]# cd /usr/src/nginx-1.10.2/
[root@localhost conf]# useradd -M -s /sbin/nologin nginx
[root@localhost conf]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module && make && make install
[root@localhost conf]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
[root@localhost conf]# cd /usr/local/nginx/conf/
[root@localhost conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf
-----------------------------------------------------
###########分别在web01 和 web02 做俩个一样的模板
[root@localhost conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  bbs.yunjisuan.com;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
        }
    server {
        listen       80;
        server_name  www.yunjisuan.com;Nginx负载均衡配置
        location / {
            root   html/www;
            index  index.html index.htm;
        }
        }
   } 
nginx负载均衡配置
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
        upstream www_server_pools {      ###这里是服务器池(服务器池的名字www_server_pools) 前面是服务器池的关键字
        
server 192.168.233.140 weight=1;    #服务器的ip地址  ; weight:权重
负载均衡是按照权重比分配的		,upstream有自动健康检测功能
server 192.168.233.141 weight=1;	#服务器的IP地址;weight:权重

}
    server {
        listen       80;
        server_name  www.yunjisuan.com;
        location / {
                proxy_pass http://www_server_pools;  #proxy_pass:反向代理推送到上面的server。
        }
        }
    }

搭建的反向代理现在有俩个问题:
第一个是:访问不到我想看的页面,老是看第一个server
第二个是:日志记录的是反向代理的ip地址,记录的不是用户的真实ip地址,无法做分析
如果在工作中不解决这俩个问题,那么你搭建的反向代理是失败的,出问题无法做分析

引流:把nginx配置文件导入给更多的upstream

重点

问题一:解决nginx反向代理web日志记录的是反向代理的ip不记录用户的真实ip地址

在这里插入图片描述#上图解释
由于是负载均衡过来的,web服务器的访问日志只能查看来源ip是负载均衡服务器的ip,这样就获取不了真正的用户ip,在企业中要避免

在这里插入图片描述

#####在nginx反向代理服务器中添加内容
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
        upstream www_server_pools {

server 192.168.233.140 weight=1;

server 192.168.233.141 weight=1;

}
    server {
        listen       80;
        server_name  www.yunjisuan.com;
        location / {
                proxy_pass http://www_server_pools;
                proxy_set_header x-Forwarded-For $remote_addr; #把客户端的ip付给请求头部中的-Forwarded-For,节点服务器获取用户的真实ip地址的必要功能配置

        }
        }
    }
-----------------------------------------------------------------------------------
### 特别注意,虽然反向代理已经配好了,但是节点服务器需要的访问日志如果要记录用户的真实IP,还必须进行日志格式配置,这样才能把代理传过来的X-Forwarded-For头信息记录下来

    #web01其中一台服务器的配置
    [root@www conf]# vim nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
  log_format main '"$http_x_forwarded_for"$remote_addr-$remote_user[$time_local]"$request"'
        '$status $body_bytes_sent "$http_referer"'		#日志格式  main是日志格式,写日志路径的时候写上
        '"$http_user_agent"';
        server {
        listen       80;
        server_name  bbs.yunjisuan.com;
        location / {
            root   html/bbs;
            index  index.html index.htm;
        }
         access_log logs/access_bbs.log main;		#这里都的写
        }
    server {
        listen       80;
        server_name  www.yunjisuan.com;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
         access_log logs/access_www.log main;  ##这里都的写
        }
    }

问题二:nginx反向代理收到了用户的请求之后,知道了用户请求的域名,但是nginx没有记录这个域名到发起的请求中,而是直接发起一个全新的请求后去找后面的web节点服务器,但是web服务器不知道你要找那个server,于是默认第一个了

在这里插入图片描述
解决方式 只需要在请求头部加入proxy_set_header host $host;
在这里插入图片描述vim /etc/hosts
在这里插入图片描述
在这里插入图片描述

下图是反向代理总要参数
Nginx反向代理总要参数 解释说明
proxy_pass http://www_server_pools; 通过proxy_pass功能把用户的请求转发到反向代理定义的upstream服务器池
proxy_set_header host $host; 在代理向后端服务器发送的http请求头部中加入host字段信息,用于当后端服务器配置有多个虚拟主机的时候,可以识别代理的是哪个虚拟主机,这是节点服务器多虚拟机时的关键配置
proxy_set_header X-Forwarded-For $remote_addr; 在代理向后端服务器发送的http请求头部中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接受记录用户的真实ip地址,而不是代理服务器的ip,这个是反向代理时,节点服务器获取用户的真实ip地址的重要配置
Nginx负载均衡核心组件

1 Nginx upstream模块
ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应Upstream组的名字上,具体写法为“proxy_pass http:// www_server_pools”,其中www_server_pools就是一个Upstream节点服务器组名字。ngx_http_upstream_module模块官方地址为:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
在这里插入图片描述

在这里插入图片描述

upstream是按照什么算法来进行负载均衡的

权重轮询
least_conn(最小连接):那台连接的用户最少,优先给谁

猜你喜欢

转载自blog.csdn.net/qq_37153289/article/details/84588859
今日推荐