Nginx反向代理、负载均衡的实现

概述:

    上篇介绍了Nginx作为web服务器的一些常用配置的说明,但是在实际生产环境中,Nginx更多是作为前端的负载均衡器,反代前端用户请求到后端真实的web服务器上,完成LNAMP的组合的方式存在。本篇就介绍一些Nginx作为http的反向代理和前端负载均衡调度器的一些常用配置,具体包括:

    1、ngx_http_proxy_module模块实现反代HTTP请求的配置

    2、ngx_http_headers_module模块实现nginx响应报文中的首部定义

    3、ngx_http_upstream_module模块实现nginx反代HTTP请求时的负载均衡

    4、ngx_stream_core_module模块实现nginx反代TCP/UDP协议请求

                   

第一章    ngx_http_proxy_module模块实现反代HTTP请求的配置

    

    1、nginx作为反向代理http请求时的相关配置选项

    nginx作为前端接受用户请求的服务器,接收到用户请求后,nginx自己构建请求报文,向后端真实服务器进行请求,后端服务器响应内容是响应给nginx,nginx再将接受到的响应报文根据需要重新封装后响应给真实用户

    nginx可以在反代用户请求到后端服务器时,将服务器响应的文件内容缓存到本地,下次用户再访问同样页面时,不用反代到后端服务器,而是直接利用本地的缓存进行响应,提升其效率

    proxy.png

    

    2、nginx反向代理示例

    blob.png

    <1> 配置好实验环境,在nginx反代服务器上安装nginx,在web1上安装LAMP,在web2上安装httpd

    blob.png

    blob.png    

    blob.png

    1477919031518126.png

    blob.png

    blob.png

    <2> 在web1和web2上提供测试页面,启动web服务,验证服务是否正常

    blob.png

    blob.png

    <3> 在nginx主机上配置反代

    blob.png

    blob.png

    <4> 在客户端上测试访问

    blob.png

    blob.png

              

    3、nginx反向代理时传递客户端IP给后端web服务器,实现日志中记录真实客户端IP的示例

   当通过nginx代理用户请求到httpd服务器时,httpd上访问日志记录的客户端IP全部是nginx的IP,这样不利于对日志进行
   分析统计,此时,我们就可以利用proxy_set_header指令,在nginx向后端发送请求报文时,在请求首部中添加进去一个真
   正客户端IP的首部

    blob.png

    在nginx主机上设置nginx请求后端web服务器的请求报文首部

    blob.png

    blob.png

    在后端httpd服务器上,修改日志记录的格式,让其记录请求首部中我们定义的首部,从而实现记录真实客户端IP

    blob.png

    测试访问,查看日志信息

    blob.png

          

    4、nginx反向代理http请求时,缓存后端响应内容的示例

    nginx的可以在反代用户请求到后端服务器时,将服务器响应的文件内容缓存到本地,下次用户再访问同样页面时,
    不用反代到后端服务器,而直接利用本地的缓存进行响应,提升其效率,缓存时key-value方式存储在内存中,key
    是可以指定的,一般是用户请求的URI,value值是相应URI对应的网页文件的特征码(如MD5码),具体的执行结果将
    保存在磁盘上的某个文件,该文件的文件名为文件内容的特征码
    
    在上述实验的基础上,实现将后端的资源缓存到nginx服务上

    blob.png

    blob.png

    blob.png

      

第二章    ngx_http_headers_module模块实现nginx响应报文中的首部定义

    1、http_headers模块的相关配置指令介绍

    http_headers模块可实现响应给客户端的报文中,添加自定义首部,或修改指定首部的值

    headers.png    

    2、添加nginx响应报文首部的的示例

    在上述实验的环境中,实现向nginx响应报文中添加首部,查看缓存是否命中

    blob.png

    blob.png

    

      

第三章    ngx_http_upstream_module模块实现nginx反代HTTP请求时的负载均衡

    1、upstream模块相关配置指令

    该模块可以实现将多台服务器定义为一个服务器组,然后定义一定的调度算法和属性,当nginx作为http反代服务器,或者fastcgi反代,uwsgi反代,scgi反代,memcached反代时,利用各个反代的指令,如:proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass指令,将请求代理到定义的服务器组上,实现负载均衡调取器的作用

    upstream.png

    2、nginx实现反代用户请求到后端多台服务器时的负载均衡示例

    在上述实验的基础上,实验将请求负载均衡到后端的两台服务器

    blob.png

    blob.png

    blob.png

    blob.png    

    blob.png

    blob.png   

    blob.png

第四章    ngx_stream_core_module模块实现nginx反代TCP/UDP协议请求

    1、stream模块的相关配置指令

    该模块可以实现nginx基于tcp或udp协议进行反代,相当于可以反向代理tcp或udp传输层相关应用,因此可以将nginx模拟成为传输层的反代的调度器(类似LVS)

    stream.png

    2、nginx配置成为后端服务器ssh服务的反向代理示例

    blob.png

    blob.png

    blob.png

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/56476

(1)
M20-1倪文超M20-1倪文超
上一篇 2016-11-01
下一篇 2016-11-01

相关推荐

  • Linux磁盘配额

    磁盘配额 什么是磁盘配额? 磁盘配额(Quota)是Linux系统中由于是多用户、多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中少数几个用户大量占掉了磁盘空间的话,那肯定影响其他用户的使用权限。因此我们就需要对每个用户限制硬盘使用空间,来避免此种情况的发生,这就是磁盘配额。 Quota的一般用途: *针对WWW server,例如:每个…

    Linux干货 2016-09-01
  • ip子网划分

    ip子网划分 人们为了通信方便,给每台计算机分配了一个类似我们电话号码一样的标识地址。IP就好比一个人的指纹一样,在INTERNET中是独一无二的(公网中)。我们可以通过ip查询到使用该ip的主机。 现在的IP分为ipv4和ipv6。前者是32位二进制组成,为了防止IP不够用由此研发出后者ipv6,ipv6是由128位二进制组成。ipv6中包含ip的数量相当…

    Linux干货 2017-07-01
  • 马哥教育网络20期+第二周练习博客

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。 3、请使用命令行展开功能来完成以下练习:    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d   …

    Linux干货 2016-06-20
  • 文件系统磁盘管理上

    磁盘:主要作用用于存储数据 早期一块硬盘共有256个盘面,每个盘面有1024个磁道,每个磁道有63个扇区,每个扇区的大小是512byte 硬盘的命名: 早期IDE硬盘标记为hd scsi、usb、sas标记为sd 引用设备的方式 设备文件名 标卷 UUID 硬盘分区: 第0个磁道的第0个扇区存放的是磁盘的信息 MBR:Master Boot Record 主…

    Linux干货 2016-08-30
  • Linux的文件系统的基础目录、帮助、部分命令介绍

    Linux的文件系统的基础目录、帮助、部分命令介绍 目录 linux基础目录 Linux获取帮助 相关控制命令,翻屏等 部分命令介绍 linux的基础目录 Bin: 共所有用户使用的基本命令,就是二进制程序 Sbin:系统的二进制程序。供管理员使用的 Boot:基本的加载器,引导加载器所依赖的各种静态文件 Dev:设备文件和特殊文件 其中设备分为两种类型,字…

    Linux干货 2016-10-29
  • yum函数介绍以及自建yum仓库

    一、前言     在之前介绍了yum的配置(详细请移步 http://www.178linux.com/archives/6445)。但是有没有发现一个问题,虽然我们已将仓库指向一个可用的仓库服务器,但是随着Linux的不断升级和改版,我们是否还需要不断的去修改仓库的配置文件,如果只有一台还好,那如果我们有多…

    Linux干货 2015-07-24