nginx的反向代理功能具体示例

实验拓扑图:

现在我们要求nginx为后端的三台服务器提供反向代理功能:
其中图片服务器单独定义为一个location作为调度,要求配置缓存功能,另外两台web服务器组成负载均衡模式,一主一备,并作健康状态检查,同时在web服务器上配置日志功能,记录真实的客户端ip地址。

首先我们来准备实验的基础环境:

反向代理服务器两台网卡分别连接互联网以及跟后端的upstream server通信

反向代理服务器端配置:
yum install -y nginx    //安装nginx服务
systemctl start nginx
systemctl enable nginx //设置开机自动启动nginx服务
vim /etc/selinux/config
SELINUX=disabled    //关闭selinux功能
systemctl stop firewalld   //关闭防火墙
打开反向代理服务器的路由转发功能
编辑/etc/sysctl.conf文件
添加net.ipv4.ip_forward=1
sysctl -p重读文件
后端upstream server服务器配置:
yum install -y httpd  //三台服务器安装httpd服务,其中一台作为图片服务器使用
vim /etc/selinux/config
SELINUX=disabled    //关闭selinux功能
systemctl stop firewalld   //关闭防火墙

配置图片服务器

编辑反向代理服务器的主配置文件,在location中定义

location ~*  \.(jpg|png|gif)$  {
                proxy_pass http://192.168.153.129;     //所有图片格式的资源请求发布发送的192.168.153.129这台主机上面
                }

配置缓存功能

在主配置文件的http字段中定义定义缓存功能,并在location中调度使用
proxy_cache_path  /cache/nginx  levels=1:1  keys_zone=mycache:32m
location ~*  \.(jpg|png|gif)$  {
                proxy_pass http://192.168.153.129;
                proxy_cache mycache;   //调用缓存名称
                proxy_cache_valid   200  206  301 302 10d;//响应结果为200,206,301,302缓存10天
                proxy_cache_valid   any  1m;   //其它响应结果全部缓存1分钟
                proxy_cache_use_stale error timeout;  //结果返回错误或者请求响应超时则返回给客户端陈旧的缓存信息
                }
创建缓存目录
mkdir  /cache/nginx
更改文件属主属组
chown -R    nginx:nginx  /cache/nginx
重新启动服务
systemctl restart nginx


在upstream server服务器中启动httpd服务并设置开机自动启动
在/var/www/html/目录中上传一张1.jpg格式的图片
使用客户端请求资源验证结果


接下来我们查看/cache/nginx目录下面是否有缓存信息生成

这里我们要特别注意:
有时候配置了缓存功能,在客户端请求之后反向代理服务器的缓存目录之下没有生成缓存文件有可能是因为http响应头(http headers),如果出现两个以上的http header,会导致缓存失败,我们可以在location字段中使用
proxy_ignore_headers Set-Cookie Cache-Control;  来忽略响应报头
还有一种可能就是没有关闭selinux,导致nginx进程在调用缓存目录时失败。关闭selinux即可。

接下来我们配置两台web服务器,为了验证upstream模块的负载均衡共能,我们这里将两台服务器的web测试界面设置为不同的内容。

首先编辑反向代理服务器的主配置文件
在配置文件中的http字段中定义upstream

upstream upservers {
            server 192.168.153.130 ;
            server 192.168.153.131 ;
            }
在location中进行调度
location /forum {                    //这里我们使用url重定向来定义
            proxy_pass http://upservers/;
         }


使用客户端验证一下


继续配置web服务器主从,并对其做健康状态检查,同时在web服务器上配置日志功能,记录真实的客户端ip地址。

upstream upservers {
            server 192.168.153.130  max_fails=2 fail_timeout=1;  //健康状态检查同下
            server 192.168.153.131 backup  max_fails=2 fail_timeout=1; //定义131这台服务器为备用服务器,对其做健康状态检查单位周期为1的时间内,达到2次请求失败则标记为节点不可用,并等待下一个周期的检查,判断其是否恢复正常。
            }


我们手动关闭主服务器的http服务,观察备用服务器是否正常工作,然后修改主服务器的测试页面并启动服务,模拟一个热备升级的过程,location配置不变
登陆主服务器进行配置
systemctl stop httpd
使用客户端请求发现无论怎样刷新只能请求备用服务器的测试页面


将主服务器测试页面修改后重启服务,使用客户端请求

因为两台服务器为主备关系所以当主服务器正常运行后,备用服务器则处于待机状态。

最后配置web服务的日志收集功能
这里要想在后端的upstream server中查看客户端的真实ip,则需要在反向代理服务器的主配置文件的location字段中使用两个参数

 proxy_set_header Host $host;    //获取客户端的主机名
 proxy_set_header C-Real-IP $remote_addr;  //获取客户端的ip地址

定义在location中

 location /forum/  {
        proxy_pass http://upservers/ ;
        proxy_set_header Host $host;
        proxy_set_header C-Real-IP $remote_addr;
        }

编辑upstream server后端服务器日志服务的配置文件
将反向代理服务器定义的C-Real-IP变量名填写到LogFormat字段第一个%后面,重启服务,另一台服务器相同配置


使用客户端请求然后查看一下日志记录文件

因为我这里使用的vmware的nat网络功能,所以这里的客户端地址显示的vmware网关的地址

问题遗留:在实际生产环境中客户端大部分使用的SNAT进行上网,可能一个公网IP后端有很多个客户端共同使用。这时我们可以基于session会话绑定来实现客户端的信息记录,具体配置将在下一小节说明。

原文地址:http://blog.51cto.com/11970509/2342173

时间: 2024-10-07 12:58:30

nginx的反向代理功能具体示例的相关文章

CentOS 7 安装Nginx做反向代理

题记 须要使用nginx的反向代理功能,測试环境为centos+NGINX 1.8.0. 跳过一些繁琐的问题,直接记录核心 步骤 (1)centos 安装在VM中.因此须要注意网络连接问题 (2)安装nginx使用的是具有网络的yum功能 (3)配置centos防火墙,须要开启80 port (4)nginx 反向代理配置 (5)性能优化设置(兴许工作...) 实现 一. yum安装nginx 先加入nginx源,測试使用最新的nginx 1.8.0 rpm -ivh http://nginx.

Linux安装Nginx使用反向代理

nginx的反向代理功能(自带了反向代理的功能,天生的二道贩子)1.实验环境准备准备2个服务器,都安装好nginx软件nginx1 192.168.13.79 作为web服务器 (理解为火车票售票点)nginx2 192.168.13.24 作为反向代理服务器(黄牛)    用户通过浏览器去访问   黄牛 (代理)浏览器访问192.168.13.24 > 192.168.13.79 2.在反向代理服务器中添加配置nginx负载均衡集群的概念:一堆服务器做一件事 原文地址:https://www.

4-1-面试必备-nginx实现反向代理配置与实战

nginx服务有缓存机制,但是要看nginx做为什么服务器来用,才启用缓存,否则自己的压力就非常大了(后端服务器压力小),因为nginx最拿手的是维持连接,缓存可以使用其他服务.nat服务工作在三层和四层,可以简单理解为工作在四层.注意:如果能工作在应用层就叫做代理,那么这个服务器就能监听一些端口但不是全部,---意思是服务器具有业务处理能力,一边是客户端(要理解客户端发的内容),一边是服务端(用自己的方式把内容传过去),所以可以有自己的缓存了 上边讲的是正向代理和反向代理的原理,nginx是可

Nginx反向代理功能

Nginx反向代理: 以入口点的方式接受来自客户端的请求,但是本身不存在任何数据,而是交由后端服务器进行处理后,再返回里客户端 请求            客户端发起请求------>代理服务器------------------------------>后端服务器 返回            后端服务器------------->代理服务器------------------------------>客户端 在这个过程客户端是不主动向后端服务器请求的,后端服务器也不直接向客户端返

九爷带你了解 nginx 的反向代理

1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发. 1.2 反向代理的作用 ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器: ②通过配置缓存功能加速Web请求:可以缓存真

Nginx构建反向代理缓存服务器

防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端:  反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提

nginx配置反向代理概述

一.nginx反向代理:Web服务器的调度器 1.反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器(可能是apache.nginx.tomcat.iis等),并将从web服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个服务器. 图上可以看出:反向代理服务器代理网站Web服务器接收Http请求,对请求进行转发.而且nginx作为反向代理服务器可以根据用户请求的内容把请求转发给后端不同的web服务器,例如静

用nginx TCP反向代理作mail邮件代理

用nginx TCP反向代理作mail邮件代理 用nginx TCP反向代理作mail邮件代理 1. 背景 2. Nginx安装(包括nginx_upstream_check_module) 3. Nginx配置 4. 总结 1. 背景 新版本nginx有TCP反向代理功能,nginx的mail proxy配置认证又太麻烦,于是就想用TCP反向功能作mail代理. 2. Nginx安装(包括nginx_upstream_check_module) cd /tmptar zxf pcre-8.35

nginx实现反向代理、负载均衡-技术流ken

1.简介 本篇博文是<nginx实现动态/静态文件缓存-技术流ken>的二部曲.将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例. 反向代理--"反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器." 负载均衡--"网络专用术语,负载均衡建立在现有网络结构之