本篇文章主要用来测试absolute_redirect、server_name_in_redirect和port_in_redirect三个指令对Nginx请求重定向的影响,Nginx配置详解请参考另一篇文章 Nginx(三) 配置文件详解
接下来,在Chrome无痕模式下进行测试。
测试1:absolute_redirect=on; server_name_in_redirect off; port_in_redirect on; #默认配置
absolute_redirect on;
server_name_in_redirect off;
port_in_redirect on;server {
listen 8688;
server_name www.reade*******.cn;root pages;
location /s {
return 301 /test.html;
}location / {
index index.html index.htm;
}
}
请求地址: http://www.47.**.**.80.cn:8688/s
请求结果:Location: http://47.**.**.80:8688/test.html
Location = 原始请求Host:Nginx监听端口/uri
客户端接收到301 Code后,以Location返回值为全新的URL重新发送一次请求。
服务端告诉客户端,我搬家了,这是新家的地址Location,以后按照这个新地址找我。
测试2:absolute_redirect=off; server_name_in_redirect off; port_in_redirect on;
请求地址: http://www.reade*******.cn:8688/s
请求结果:Location: /test.html
客户端接收到301 Code后,以Location返回值为新的URI重新发送一次请求,Host和port不变。
服务端告诉客户端,我家前门坏了,你从后门进来,后门在这Location。
测试1、2最后重新发起请求的地址都是 http://www.reade*******.cn:8688/test.html,虽然结果相同,但根本逻辑还是不一样的。
测试3:absolute_redirect=on; server_name_in_redirect on; port_in_redirect on;
修改配置文件server_name为IP。
absolute_redirect on;
server_name_in_redirect on;
port_in_redirect on;server {
listen 8688;
server_name 47.**.**.80;
root pages;
location /s {
return 301 /test.html;
}
location / {
index index.html index.htm;
}
}
请求地址: http://www.reade*******.cn:8688/s
请求结果:Location: http://47.**.**.80:8688/test.html
非80/443端口:Location=server_name:Nginx监听端口/uri
Nginx将原请求中的Host替换为server_name,客户端接收到301 Code后,以Location返回值为全新的URL重新发送一次请求。
测试4:absolute_redirect=on; server_name_in_redirect on; port_in_redirect off;
请求地址: http://www.reade*******.cn:8688/s
请求结果:Location: http://47.**.**.80/test.html
Location=server_name/uri
Nginx此时返回的Location中没有port,未将监听的port添加的Host后。
测试5:absolute_redirect=on; server_name_in_redirect off; port_in_redirect off;
请求地址: http://www.reade*******.cn:8688/s
请求结果:Location: http://www.reade*******.cn/test.html
Location=原始请求Host/uri
Host没有替换,请求地址中没有port。
经过上面的5个测试,我们可以更深刻的理解 absolute_redirect、server_name_in_redirect、port_in_redirect这三个指令的作用。另外,需要特殊说明下,当我们访问80或443端口时,无论port_in_redirect 是否开启,Location中都不会有port,这应该算是第6个测试,所以上面三个参数无论如何配置,一共是六种重定向结果。更详细的讲解请参考这篇文章。