零基础自学Nginx
文章目录
- 零基础自学Nginx
- 进阶篇
- 4 Nginx反向代理
- 4.3 Nginx反向代理的配置语法
- 4.3.3 proxy_redirect指令
进阶篇
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]
先配个最原始的
测试
没问题
配置代理服务器155【就是简单的让它把请求转发到157】
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://192.168.88.157:8081/;
}
}
测试访问155 的8081端口
没问题,分发过去了
现在思考问题,因为8081下的默认index存在,所以能访问到东西,但是如果搞一个不存在的
那肯定就404了,因为157 服务端上确实没有abc这资源
但是我现在想的是,404 给用户感觉不好, 就是说,就算我没有这个资源,但是我还是想把欢迎首页给展示出来
在157上配置一下
意思是如果资源不存在,还是返回302,并且和自己的首页
试试可不可行
可以看到,确实可以实现,302 临时重定向了,但是IP 地址确实变化了
我们通过curl 再仔细研究一下
就是这个原因,访问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
}
}
试试
测试
现在的问题就是,好像有点不对,这个欢迎页面不是 157 的,而是155 的欢迎页面
原因很简单,因为155 的80 端口没有转发
改一下就行了
再试一次
这下就没问题了,就算我们访问的是157 下不存在的资源,302,帮我们显示155,但是实际上是 157的欢迎页面
这样也很好的保护了我们服务端的真实IP 【牛逼牛逼】
====>>>>该指令的几组选项
proxy_redirect redirect replacement;
redirect:目标,Location的值
replacement:要替换的值
proxy_redirect default;
default;
将location块的uri变量作为replacement,
将proxy_pass变量作为redirect进行替换
proxy_redirect off;
关闭proxy_redirect的功能