Nginx脾气验证-反向代理/负载均衡/页面缓存/UXC60L重定向

原稿刊载于cu:2014-08-25

参照文书档案:

  1. Nginx
    反向代理、负载均衡、页面缓存、U卡宴L重写等:http://freeloda.blog.51cto.com/2033581/1288553
  2. Nginx反向代理/负载均衡轻松安插:http://www.cnblogs.com/jacktang/p/3669115.html
  3. Nginx反向代理,后端web怎样获得真实ip:http://www.bubuko.com/infodetail-822723.html

 本文针对Nginx多少个常用特色做轻易表达(高手请略过),通过轻松的证实熟练配置。

一.情形策动

1. 操作系统

CentOS-7-x86_64-Everything-1511

2. Nginx版本

Nginx-1.11.3:
http://nginx.org/download/nginx-1.11.3.tar.gz

安装配备请见:https://www.cnblogs.com/netonline/p/7327409.html

3. 拓扑图

图片 1

  1. Proxy服务器为使用VMware
    ESXi设想出的1台服务器,已安装并运维nginx服务,前段访问地址x.140.246.55(真实的网络ip地址,隐去),后端地址172.19.200.215;
  2. Web1服务器为利用Docker手艺生成的1台服务器,已设置并运维nginx服务,ip地址172.19.200.241;
  3. Web2同Web1服务器,ip地址172.19.200.242;
  4. 设置web55%测量检验页面(路线参照他事他说加以考察nginx安装步骤),以利于后续查看验证结果,如下:

    web1:

    [root@e84e8f6ba866
    ~]# echo “<h1>Welcome to test site web1!</h1>”  >
    /usr/local/nginx/html/index.html

    图片 2

    web2:

    [root @56f610597bcd ~]# echo
    “<h1>Welcome to test site web2!</h1>” >
    /usr/local/nginx/html/index.html

    图片 3

二.反向代理

1. 反向代理表达

指令:proxy_pass

语法:proxy_pass
URL

应用字段:location字段

#U奔驰M级L能够是被代理服务器的ip地址,ip地址+端口可能被映射的url

2. 反向代理配置

#被代理服务器暂时设置web1;
#重要:重新加载nginx配置文件,重新加载之前可以通过” /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf”测试配置文件修改是否正确
[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf
        location / {
             proxy_pass http://172.19.200.241;
        }
[root@localhost conf]# service nginx reload

3. 验证

主意1:通过浏览器访谈代理服务器,再次回到结果是web1的测量检验页面,如下:

图片 4

措施2:通过curl命令访谈代理服务器,重临结果是web1的测量试验页面,如下:

[root@localhost ~]# curl http://x.140.246.55

图片 5

4. 翻看web服务器的寻访日志

#从访问日志看到,客户端ip都是nginx代理服务器的后端ip,后端web服务器并没有捕获到真实客户端ip
[root@e84e8f6ba866 ~]# cd /usr/local/nginx/logs/
[root@e84e8f6ba866 logs]# tail -f access.log 
172.19.200.215 - - [24/Aug/2016:09:20:49 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
172.19.200.215 - - [24/Aug/2016:09:20:49 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
172.19.200.215 - - [24/Aug/2016:09:20:52 +0000] "GET / HTTP/1.0" 200 36 "-" "curl/7.29.0"
172.19.200.215 - - [24/Aug/2016:09:20:53 +0000] "GET / HTTP/1.0" 200 36 "-" "curl/7.29.0"

5. web服务器捕获真实顾客端ip

1)修改nginx代理服务器配置

#”proxy_set_header X-Real-IP $remote_addr”指令将发送到被代理服务器的请求头重新定义或者增加一些字段;此值可以是一个文本,变量或它们的组合;
#proxy_set_header在指定的字段中没有定义时会从它的上级字段继承。
[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vim nginx.conf
        location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://172.19.200.241;

        }
[root@localhost conf]# service nginx reload

2)修改web服务器配置

#”set_real_ip_from IP”指令在http字段内,但在server字段之外,IP为nginx代理服务器可访问到后端web服务器的地址。
[root@e84e8f6ba866 ~]# cd /usr/local/nginx/conf/
[root@e84e8f6ba866 conf]# vim nginx.conf
set_real_ip_from 172.19.200.215;
[root@e84e8f6ba866 conf]# service nginx reload

6. 表达捕获真实客商端ip

#在客户端使用curl命令访问代理服务器,查看后端web服务器访问日志;
#从访问日志看到,后端web服务器已捕获到真实客户端ip
[root@e84e8f6ba866 logs]# tail -f access.log

图片 6

三.负载均衡

1. 载重均衡表明

1)upstream模块

upstream是Nginx的HTTP
Upstream模块,此模块通过八个简约的调节算法来贯彻客户端ip到后端服务器的载重均衡。

2)upstream援助的负荷均衡算法

(1)轮询(默认)

每一个诉求按期间顺序依次分配到不一样的后端服务器,假设后端某台服务器宕机,故障系统被活动删除,使客商访谈不受影响。能够经过weight
钦赐轮询权值,weight值越大,分配到的走访机率越高,首要用于后端每一个服务器质量不均的情况下。

(2)ip_hash

种种须求按访问ip的hash结果分配,那样来自同叁个IP的访客固定访问一个后端服务器,可使得化解动态网页存在的session分享难题

(3)fair

比地点多少个越发智能的载荷均衡算法。此算法能够依照页面大小和加载时间长短智能地张开负荷均衡,即传说后端服务器的响应时间来分配央求,响应时间短的预先分配。Nginx本身不补助fair,假如必要选取这种调节算法,必需下载Nginx的upstream_fair模块。

(4)url_hash

此方法按访谈url的hash结果来分配央求,使各种url定向到同多个后端服务器,可进一步进步后端缓存服务器的频率。Nginx本身不扶助url_hash,如若需求使用这种调解算法,必需设置Nginx
的hash软件包。

3)upstream帮忙的状态参数

在upstream模块中,可以在种种后端服务器后安装负载均衡调整中的状态。常用的动静有:

(1)down

表示近来的server一时半刻不到场负载均衡。

(2)backup

预留的备份机器,当其余具有的非backup机器出现故障也许忙的时候,才会呈请backup机器,由此那台机器的下压力最轻。

(3)max_fails

允许乞请失利的次数,默以为1。当凌驾最大次数时,再次来到proxy_next_upstream
模块定义的不当。

(4)fail_timeout

在经验了max_fails次停业后,暂停服务的岁月,max_fails可以和fail_timeout一齐使用。

2. 载重均衡配置

[root@localhost ~]# cd /usr/local/nginx/conf/

#upstream模块在http字段内, server模块之外;upstream指定的负载均衡名可自定义,后面location字段中”proxy_pass”指令调用自定义的负载均衡名即可;
#weight值默认可不用配置,如果后端服务器性能不均,可以通过weight值负载调度;
#可以通过backup状态参数预留备份服务器;
#默认使用轮询调度算法,如果使用ip_hash调度算法,后端服务器的负载均衡调度状态不能是backup
[root@localhost conf]# vim nginx.conf
    upstream test.backend {
             # ip_hash;
             server 172.19.200.241 weight=1;
             server 172.19.200.242 weight=1;
             # server 127.0.0.1:8080 backup;
     }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://test.backend;
        }
    }

[root@localhost conf]# service nginx reload

3. 验证

采纳curl命令访谈代理服务器,交替重临web1与web2的测验页面,如下:

[root@localhost ~]# date ; curl http://x.140.246.55

图片 7

四.页面缓存

1. 页面缓存表明

1)proxy_cache_path

指令:proxy_cache_path

语法:proxy_cache_path
path [levels=number] keys_zone=zone_name:zone_size
[inactive=time] [max_size=size];

使用字段:http字段,server字段之外

#命令内定缓存的门路和有个别别样参数,缓存的数额存款和储蓄在文件中,缓存文件使用代理url的哈希值作为主要字与公事名;

#levels参数钦命钦赐目录结构,钦命缓存的子目录数,能够选择任性的1位或2位数字作为目录结构,但最多只可以是三级目录,格式如X,
X:X,或X:X:X,转变为命令如”2″, “2:2”, “1:1:2″等;

#具备移动的key和元数据存款和储蓄在分享的内部存储器池中,那几个区域用keys_zone参数钦定。分享池的称呼自定义,共享池的轻重缓急可用”m”代表单位;内部存款和储蓄器池的轻重依据缓存页面数的比重进行安装,一个页面(文件)的元数据大小遵照操作系统来定,如FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节;

#inactive参数内定缓存超时时间,指按期间内并未有被呼吁的多少则删除,默许inactive为10分钟;

#一个名叫cache
manager的进度序调节制磁盘的缓存大小,它被用来删除不移步的缓存与调控缓存大小,这一个都在max_size参数中定义,当这两天缓存的值越过max_size钦命的值之后,当先其尺寸后最少使用数据(LRU替换算法)将被删除。

2)proxy_cache

指令:proxy_cache

语法:proxy_cache
zone_name;

选择字段:http,
server, location

#安装一个缓存区域的(自定义)名称,二个平等的区域能够在区别的地方使用;

#缓存指令信赖代理缓冲区(buffers),若是proxy_buffers设置为off,缓存不会卓有功能。

3)proxy_cache_valid

指令:proxy_cache_valid

语法:
proxy_cache_valid reply_code [reply_code …] time;

行使字段:
http, server, location

#为分裂的对答设置差别的缓存时间,如:”proxy_cache_valid
200 302 10m;”

即应答代码为200和302时,设置缓存时间为10分钟;

#假定只定义时间:如:”proxy_cache_valid
5m;” 那只对代码为200, 301和302的答复举办缓存;

#能够行使any参数应答,如:”
proxy_cache_valid any 1m;”

2. 页面缓存变量表达

假使不在代理服务器的安插文件中布置页面缓存变量,则表明时翻看结果不平价。

1)$server_addr

服务器地址,在产生三遍系统调用后可显著那些值;要是要绕开系统调用,则必需在listen中钦点地点何况使用bind参数。

2)$upstream_cache_status

MISS:未命中

EXPIRED –
expired
:央浼被传送到后端

UPDATING –
expired
:由于proxy/fastcgi_cache_use_stale正在更新,将选择旧的答疑

STALE

expired
:由于proxy/fastcgi_cache_use_stale超期,后端将收获过期的作答

HIT:命中

3. 页面缓存配置

[root@localhost ~]# cd /usr/local/nginx/conf/

#缓存路径自定义,注意key_zone定义的共享内存池与location字段中”proxy_cache”对应;
#两个”add_header”指令增加了头部,如不设置,验证时不方便查看结果;
#”proxy_buffering”如果是”off”,则缓存不生效
[root@localhost conf]# vim nginx.conf
    proxy_cache_path /usr/local/nginx/cache/testcache levels=1:2 keys_zone=testcache:20m max_size=1g;

    upstream test.backend {
             # ip_hash;
             server 172.19.200.241;
             server 172.19.200.242;
             # server 127.0.0.1:8080 backup
     }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;

        location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://test.backend;
             # proxy_buffering off;
             proxy_cache testcache;
             proxy_cache_valid 200 10m;
        }
    }

#在”proxy_cache_path”中定义的路径需要补充完整,并赋予权限
[root@localhost conf]# mkdir -p /usr/local/nginx/cache/testcache
[root@localhost conf]# chown www:www /usr/local/nginx/cache
[root@localhost conf]# service nginx reload

4. 验证

动用浏览器访谈代理服务器,F5不辍刷新,重返web2(恐怕web1)的测验页面,如下:

图片 8

  1. 按F12可调用浏览器的费用调节和测验工具,选拔Network选项,可知到Response
    Headers中,暗绛红方框中晋升:”X-Cache: HIT” (与代理服务器配置文件中”
    add_header”有关);
  2. 另注意General中,深稻草黄方框中提醒:”
    Status Code:304 Not Modified”。

五.URL重定向

U奔驰M级L重写比较复杂,这里只轻易的印证一下重定向。

1. UWranglerL重写模块表达

重写模块Rewrite允许选择正则表明式重新UOdysseyI,但需求PCRE库的扶助,而且可依附有关变量重定向和挑选分化的布署。

固然rewrite指令在server字段中内定,那么就要被呼吁的location明确此前施行;倘使在命令实施后所摘取的location中有别的的重写法规,那么指令也被实施。假使在location中执行这么些命令发出了新的USportageI,那么location又二遍鲜明了新的UENCOREI,那样的轮回可最多试行10遍,超过后nginx将回来500破绽百出。

2. 重定向配置

重定向验证方案:将客商端到web1上的乞请重定向到web2。

设计:

  1. 将web2从负载均衡器中收回,负载均衡器只保留web1;
  1. (option)
    将nginx反向代理服务有关页面缓存的装置裁撤,幸免忧虑验证结果;
  1. 在web1
    的布局文件中设置重定向法规。

1)Nginx反向代理服务配置

[root@localhost ~]# cd /usr/local/nginx/conf/

[root@localhost conf]# vim nginx.conf
    upstream test.backend {
             # ip_hash;
             server 172.19.200.241 weight=1;
             # server 172.19.200.242 weight=1;
             # server 127.0.0.1:8080 backup
     }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_pass http://test.backend;
        }

[root@localhost conf]# service nginx reload

2)被代理服务器web1配置

[root@e84e8f6ba866 ~]# cd /usr/local/nginx/conf/

[root@e84e8f6ba866 conf]# vim nginx.conf
        location / {
            root   html;
            index  index.html index.htm index.php;
            rewrite ^/ http://172.19.200.242;
        }

[root@e84e8f6ba866 conf]# service nginx reload

3. 验证

  1. 在客商端浏览器访问反向代理服务器:http://x.140.246.55
  1. 回到结果已重定向到web2(这里客商端能访问到172.19.200.0网段,借使访谈不到,浏览器地址栏重定向到新的地方,但测量试验页面重返错误);
  1. 利用支付调节和测量试验工具可观察,访谈反向代理服务器时,状态码为”302
    Moved
    Temporarily
    “,再次来到地址已重定向到”172.19.200.242″,web2的地方;
  1. 重定向后的页面重临状态码为”200
    OK (from cache)
    “。

图片 9图片 10

相关文章