图片 18

页面缓存

原文发表于cu:2016-08-25

Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向,nginx重定向

原文发表于cu:2016-08-25

参考文档:

 本文针对Nginx几个常用特性做简单验证(高手请略过),通过简单的验证熟悉配置。

参考文档:

一.环境准备

  1. Nginx
    反向代理、负载均衡、页面缓存、URL重写等:
  2. Nginx反向代理/负载均衡简单配置:
  3. Nginx反向代理,后端web如何获取真实ip:

1. 操作系统

CentOS-7-x86_64-Everything-1511

 本文针对Nginx几个常用特性做简单验证(高手请略过),通过简单的验证熟悉配置。

2. Nginx版本

Nginx-1.11.3:

安装配置请见:

一.环境准备

3. 拓扑图

图片 1

1. 操作系统

CentOS-7-x86_64-Everything-1511

二.反向代理

2. Nginx版本

Nginx-1.11.3:

安装配置请见:

1. 反向代理说明

指令:proxy_pass

语法:proxy_pass URL

使用字段:location字段

#URL可以是被代理服务器的ip地址,ip地址+端口或者被映射的url

3. 拓扑图

图片 2

  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. 设置web1/2测试页面(路径参考nginx安装步骤),以方便后续查看验证结果,如下:

    web1:

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

    图片 3

    web2:

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

    图片 4

2. 反向代理配置

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

二.反向代理

3. 验证

方式1:通过浏览器访问代理服务器,返回结果是web1的测试页面,如下:

图片 5

方式2:通过curl命令访问代理服务器,返回结果是web1的测试页面,如下:

[[email protected] ~]# curl http://x.140.246.55

图片 6

1. 反向代理说明

指令:proxy_pass

语法:proxy_pass
URL

使用字段:location字段

#URL可以是被代理服务器的ip地址,ip地址+端口或者被映射的url

4. 查看web服务器的访问日志

#从访问日志看到,客户端ip都是nginx代理服务器的后端ip,后端web服务器并没有捕获到真实客户端ip
[[email protected] ~]# cd /usr/local/nginx/logs/
[[email protected] 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"

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

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

3. 验证

方式1:通过浏览器访问代理服务器,返回结果是web1的测试页面,如下:

图片 7

方式2:通过curl命令访问代理服务器,返回结果是web1的测试页面,如下:

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

图片 8

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

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

        }
[[email protected] conf]# service nginx reload

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"

2)修改web服务器配置

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

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

6. 验证捕获真实客户端ip

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

图片 9

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

1. 负载均衡说明

6. 验证捕获真实客户端ip

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

图片 10

1)upstream模块

upstream是Nginx的HTTP
Upstream模块,此模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡。

三.负载均衡

2)upstream支持的负载均衡算法

1. 负载均衡说明

(1)轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。可以通过weight
指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

1)upstream模块

upstream是Nginx的HTTP
Upstream模块,此模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡。

(2)ip_hash

每个请求按访问ip的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,可有效解决动态网页存在的session共享问题

2)upstream支持的负载均衡算法

(3)fair

比上面两个更加智能的负载均衡算法。此算法可以依据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

(1)轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。可以通过weight
指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

(4)url_hash

此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要使用这种调度算法,必须安装Nginx
的hash软件包。

(2)ip_hash

每个请求按访问ip的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,可有效解决动态网页存在的session共享问题

3)upstream支持的状态参数

在upstream模块中,可以在每个后端服务器后设置负载均衡调度中的状态。常用的状态有:

(3)fair

比上面两个更加智能的负载均衡算法。此算法可以依据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

(1)down

表示当前的server暂时不参与负载均衡。

(4)url_hash

此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要使用这种调度算法,必须安装Nginx
的hash软件包。

(2)backup

预留的备份机器,当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

3)upstream支持的状态参数

在upstream模块中,可以在每个后端服务器后设置负载均衡调度中的状态。常用的状态有:

(3)max_fails

允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream
模块定义的错误。

(1)down

表示当前的server暂时不参与负载均衡。

(4)fail_timeout

在经历了max_fails次失败后,暂停服务的时间,max_fails可以和fail_timeout一起使用。

(2)backup

预留的备份机器,当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

2. 负载均衡配置

[[email protected] ~]# cd /usr/local/nginx/conf/

#upstream模块在http字段内, server模块之外;upstream指定的负载均衡名可自定义,后面location字段中”proxy_pass”指令调用自定义的负载均衡名即可;
#weight值默认可不用配置,如果后端服务器性能不均,可以通过weight值负载调度;
#可以通过backup状态参数预留备份服务器;
#默认使用轮询调度算法,如果使用ip_hash调度算法,后端服务器的负载均衡调度状态不能是backup
[[email protected] 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;
        }
    }

[[email protected] conf]# service nginx reload

(3)max_fails

允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream
模块定义的错误。

3. 验证

采用curl命令访问代理服务器,交替返回web1与web2的测试页面,如下:

[[email protected] ~]# date ; curl http://x.140.246.55

图片 11

(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

1. 页面缓存说明

3. 验证

采用curl命令访问代理服务器,交替返回web1与web2的测试页面,如下:

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

图片 12

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,缓存不会生效。

1. 页面缓存说明

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;”

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. 页面缓存变量说明

如果不在代理服务器的配置文件中配置页面缓存变量,则验证时查看结果不方便。

2)proxy_cache

指令:proxy_cache

语法:proxy_cache
zone_name;

使用字段:http,
server, location

#设置一个缓存区域的(自定义)名称,一个相同的区域可以在不同的地方使用;

#缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。

1)$server_addr

服务器地址,在完成一次系统调用后可确定这个值;如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。

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)$upstream_cache_status

MISS:未命中

EXPIRED – expired:请求被传送到后端

UPDATING –
expired
:由于proxy/fastcgi_cache_use_stale正在更新,将使用旧的应答

STALE –
expired
:由于proxy/fastcgi_cache_use_stale超期,后端将得到过期的应答

HIT:命中

2. 页面缓存变量说明

如果不在代理服务器的配置文件中配置页面缓存变量,则验证时查看结果不方便。

3. 页面缓存配置

[[email protected] ~]# cd /usr/local/nginx/conf/

#缓存路径自定义,注意key_zone定义的共享内存池与location字段中”proxy_cache”对应;
#两个”add_header”指令增加了头部,如不设置,验证时不方便查看结果;
#”proxy_buffering”如果是”off”,则缓存不生效
[[email protected] 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”中定义的路径需要补充完整,并赋予权限
[[email protected] conf]# mkdir -p /usr/local/nginx/cache/testcache
[[email protected] conf]# chown www:www /usr/local/cache
[[email protected] conf]# service nginx reload

1)$server_addr

服务器地址,在完成一次系统调用后可确定这个值;如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。

4. 验证

采用浏览器访问代理服务器,F5不断刷新,返回web2(或者web1)的测试页面,如下:

图片 13

2)$upstream_cache_status

MISS:未命中

EXPIRED –
expired
:请求被传送到后端

UPDATING –
expired
:由于proxy/fastcgi_cache_use_stale正在更新,将使用旧的应答

STALE

expired
:由于proxy/fastcgi_cache_use_stale超期,后端将得到过期的应答

HIT:命中

五.URL重定向

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

URL重写比较复杂,这里只简单的验证一下重定向。

4. 验证

采用浏览器访问代理服务器,F5不断刷新,返回web2(或者web1)的测试页面,如下:

图片 14

  1. 按F12可调用浏览器的开发调试工具,选择Network选项,可看到Response
    Headers中,绿色方框中提示:”X-Cache: HIT” (与代理服务器配置文件中”
    add_header”有关);
  2. 另注意General中,绿色方框中提示:”
    Status Code:304 Not Modified”。

1. URL重写模块说明

重写模块Rewrite允许使用正则表达式重新URI,但需要PCRE库的支持,并且可根据相关变量重定向和选择不同的配置。

如果rewrite指令在server字段中指定,那么将在被请求的location确定之前执行;如果在指令执行后所选择的location中有其他的重写规则,那么指令也被执行。如果在location中执行这个指令产生了新的URI,那么location又一次确定了新的URI,这样的循环可最多执行10次,超出后nginx将返回500错误。

五.URL重定向

2. 重定向配置

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

设计:

URL重写比较复杂,这里只简单的验证一下重定向。

1)Nginx反向代理服务配置

[[email protected] ~]# cd /usr/local/nginx/conf/

[[email protected] 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;
        }

[[email protected] conf]# service nginx reload

1. URL重写模块说明

重写模块Rewrite允许使用正则表达式重新URI,但需要PCRE库的支持,并且可根据相关变量重定向和选择不同的配置。

如果rewrite指令在server字段中指定,那么将在被请求的location确定之前执行;如果在指令执行后所选择的location中有其他的重写规则,那么指令也被执行。如果在location中执行这个指令产生了新的URI,那么location又一次确定了新的URI,这样的循环可最多执行10次,超出后nginx将返回500错误。

2)被代理服务器web1配置

[[email protected] ~]# cd /usr/local/nginx/conf/

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

[[email protected] conf]# service nginx reload

2. 重定向配置

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

设计:

  1. 将web2从负载均衡器中取消,负载均衡器只保留web1;
  1. (option)
    将nginx反向代理服务有关页面缓存的设置取消,防止干扰验证结果;
  1. 在web1
    的配置文件中设置重定向规则。

3. 验证

图片 15图片 16

原文发表于 cu : 2016-08-25 参考文档:
本文针对Nginx几个常用特性做简单验…

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. 在客户端浏览器访问反向代理服务器:
  1. 返回结果已重定向到web2(这里客户端能访问到172.19.200.0网段,如果访问不到,浏览器地址栏重定向到新的地址,但测试页面返回错误);
  1. 使用开发调试工具可看到,访问反向代理服务器时,状态码为”302
    Moved
    Temporarily
    “,返回地址已重定向到”172.19.200.242″,web2的地址;
  1. 重定向后的页面返回状态码为”200
    OK (from cache)
    “。

图片 17图片 18