零基础自学Nginx


文章目录

  • 零基础自学Nginx
  • 进阶篇
  • 4 Nginx反向代理
  • 4.3 Nginx反向代理的配置语法
  • 4.3.3 proxy_redirect指令


Nginx internal redirect 配置 nginx proxy_redirect用法_nginx

进阶篇

4 Nginx反向代理

4.3 Nginx反向代理的配置语法
4.3.3 proxy_redirect指令

该指令是用来重置头信息中的"Location"和"Refresh"的值。

语法

proxy_redirect redirect replacement;

proxy_redirect default;

proxy_redirect off;

默认值

proxy_redirect default;

位置

http、server、location

====>>>>为什么要用该指令?

服务端[192.168.88.157]

先配个最原始的

Nginx internal redirect 配置 nginx proxy_redirect用法_运维_02

测试

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_03

没问题

配置代理服务器155【就是简单的让它把请求转发到157】

server {
	listen  8081;
	server_name localhost;
	location / {
		proxy_pass http://192.168.88.157:8081/;
	}
}

Nginx internal redirect 配置 nginx proxy_redirect用法_运维_04

测试访问155 的8081端口

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_05

没问题,分发过去了

现在思考问题,因为8081下的默认index存在,所以能访问到东西,但是如果搞一个不存在的

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_06

那肯定就404了,因为157 服务端上确实没有abc这资源

但是我现在想的是,404 给用户感觉不好, 就是说,就算我没有这个资源,但是我还是想把欢迎首页给展示出来

在157上配置一下

Nginx internal redirect 配置 nginx proxy_redirect用法_服务端_07

意思是如果资源不存在,还是返回302,并且和自己的首页

试试可不可行

Nginx internal redirect 配置 nginx proxy_redirect用法_服务端_08

可以看到,确实可以实现,302 临时重定向了,但是IP 地址确实变化了

我们通过curl 再仔细研究一下

Nginx internal redirect 配置 nginx proxy_redirect用法_运维_09

就是这个原因,访问155 变成了157

现在就有个问题了,155 作为代理服务器,按理说,我1 这个客户端应该是只能知道 155 的IP 地址,但是现在服务端157 直接暴露了,这个很明显是不应该被允许的

这下就要用到proxy_redirect 指令了

代理服务端[192.168.88.155]

server {
	listen  8081;
	server_name localhost;
	location / {
		proxy_pass http://192.168.88.146:8081/;
		proxy_redirect http://192.168.88.157/ http://192.168.88.155/;
		# 意为将157 替换为 155
	}
}

试试

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_10

测试

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_11

现在的问题就是,好像有点不对,这个欢迎页面不是 157 的,而是155 的欢迎页面

原因很简单,因为155 的80 端口没有转发

Nginx internal redirect 配置 nginx proxy_redirect用法_运维_12

改一下就行了

Nginx internal redirect 配置 nginx proxy_redirect用法_Nginx_13

再试一次

Nginx internal redirect 配置 nginx proxy_redirect用法_nginx_14

这下就没问题了,就算我们访问的是157 下不存在的资源,302,帮我们显示155,但是实际上是 157的欢迎页面

Nginx internal redirect 配置 nginx proxy_redirect用法_java_15

这样也很好的保护了我们服务端的真实IP 【牛逼牛逼】

====>>>>该指令的几组选项

proxy_redirect redirect replacement;

redirect:目标,Location的值
replacement:要替换的值

proxy_redirect default;

default;
将location块的uri变量作为replacement,
将proxy_pass变量作为redirect进行替换

proxy_redirect off;

关闭proxy_redirect的功能