nginx的proxy_redirect

proxy_redirect

语法:proxy_redirect [ default|off|redirect replacement ];
默认:proxy_redirect default;
配置块:http、server、location
当上游服务器返回的响应是重定向或刷新请求(如HTTP响应码是301或者302)时,proxy_redirect可以重设HTTP头部的location或refresh字段。

        location /login {
            proxy_pass http://target_servers/login ;
        }

假设当前nginx的访问地址为http://192.168.99.100:8080,如果target_servers又有302到192.168.99.100/xxx
那么可以添加下redirect,将302的location改为http://192.168.99.100:8080/xxx

        location /login {
            proxy_pass http://target_servers/login ;
            proxy_redirect http://192.168.99.100/ http://192.168.99.100:8080/;
        }

host变量

如果不想写死ip地址,可以使用nginx的变量

        location /login {
            proxy_pass http://target_servers/login ;
            proxy_redirect http://$host/ http://$http_host/;
        }

其中host不带端口的,也就是nginx部署的主机ip,而$http_host是带端口的

NGINX的proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改。以例子说明:

server { 
       listen       80; 
       server_name  test.abc.com; 
       location / { 
            proxy_pass http://10.10.10.1:9080; 
       } 
   }这段配置一般情况下都正常,但偶尔会出错, 错误在什么地方呢? 抓包发现服务器给客户端的跳转指令里加了端口号,如 Location: http://test.abc.com:9080/abc.html 。因为nginx服务器侦听的是80端口,所以这样的URL给了客户端,必然会出错.针对这种情况, 加一条proxy_redirect指令: proxy_redirect http://test.abc.com:9080/ / ,把所有“http://test.abc.com:9080/”的内容替换成“/”再发给客户端,就解决了。

server { 
       listen       80; 
       server_name  test.abc.com; 
       proxy_redirect http://test.abc.com:9080/ /; 
       location / { 
            proxy_pass http://10.10.10.1:9080; 
       } 
   }

http://nginx.179401.cn/ 
圣地啊 加红 加粗~!!

出处:http://nginx.179401.cn/StandardHTTPModules/HTTPProxy.html 
proxy_redirect 
语法:proxy_redirect [ default|off|redirect replacement ] 
默认值:proxy_redirect default 
使用字段:http, server, location 
如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。 
假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/ 
这个指令: 
proxy_redirect http://localhost:8000/two/ http://frontend/one/; 
将Location字段重写为http://frontend/one/some/uri/。 
在代替的字段中可以不写服务器名:

proxy_redirect http://localhost:8000/two/ /; 
这样就使用服务器的基本名称和端口,即使它来自非80端口。 
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。 
例如下列两个配置等效:

location /one/ {  proxy_pass       http://upstream:port/two/;  proxy_redirect   default;} location /one/ {  proxy_pass       http://upstream:port/two/;  proxy_redirect   http://upstream:port/two/   /one/;} 
在指令中可以使用一些变量:

proxy_redirect   http://localhost:8000/    http://$host:$server_port/; 
这个指令有时可以重复:

proxy_redirect   default;  proxy_redirect   http://localhost:8000/    /;  proxy_redirect   http://www.example.com/   /; 
参数off将在这个字段中禁止所有的proxy_redirect指令:

proxy_redirect   off;  proxy_redirect   default;  proxy_redirect   http://localhost:8000/    /;  proxy_redirect   http://www.example.com/   /; 
利用这个指令可以为被代理服务器发出的相对重定向增加主机名:

原文地址:https://www.cnblogs.com/zhengchunyuan/p/10636619.html

时间: 2024-11-07 00:04:50

nginx的proxy_redirect的相关文章

Nginx和apache 配置

当nginx需要做反向代理和负载均衡的时候配置如下: upstream mir_k8s_service_server { server 10.111.11.83:8080 weight=10; server 10.111.11.84:8080 weight=10; #也可以不需要weight, 用ip_hash; #ip_hash; #server 10.111.11.83:8080; #server 10.111.11.84:8080; } server { listen 3051; loca

nginx配置使用笔记:三

什么是remote_addr remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你 的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把 remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个 代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP. 什么是x_forwarded_for 正如上面所述,当你使用了代

nginx和Tomcat集成后发生的重定向问题分析和解决

nginx和Tomcat集成后发生的重定向问题分析和解决 Tomcat前端配置一个HTTP服务器应该是大部分应用的标配了,基本思路就是所有动态请求都反向代理给后端的Tomcat,HTTP服务器来处 理静态请求,包括图片.js.css.html以及xml等.这样可以让你的应用的负载能力提高很多,前端这个HTTP服务器主流用的最多的当属 Apache HTTP Server和nginx.今天这篇文章主要讲解的是这种组合的方式的前提下,后端的Tomcat中的app在301跳转的时候遇到的一个问题. 问

Nginx SSL 结合Tomcat 重定向URL变成HTTP的问题

http://www.siven.net/posts/d925bb5d.html *********************************************** 问题描述 由于要配置服务器(Nginx + Tomcat)的SSL的问题(Nginx同时监听HTTP和HTTPS),但是,如果用户访问的是HTTPS协议,然后Tomcat进行重定向的时候,却变成了HTTP. 逐步实践过程 在网上找了一些资料,有些是通过修改Nginx配置即可解决,也有只对Tomcat配置进行调整解决的-

LB负载均衡之Nginx-Proxy

LB负载均衡之Nginx-Proxy Nginx 反向代理及负载均衡引用实战 Nginx反向代理的原理优点:      Nginx proxy(反向代理)作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡.反向代理可以简单的理解为:代理服务器来接收internet上的服务器请求,然后将请求转发给内部的服务器上,然后将结果返回给internet上请求的客户端,所以代理服务器对外表现出来的只是一台服务器.反向代理服务器也称为Web服务器加速,针对web服务器提供加

个人博客如何开启 https

以前写过利用 wordpress 搭建的一个博客『个人博客搭建( wordpress )』,绑定了域名,但是没开启 https,在浏览博客的时候浏览器会提示不安全.下面来谈下个人博客如何免费申请证书,开启 https . 一.申请 Let's Encrypt 证书 系统环境要求:python2.7+ 手动申请网址:letsencrypt.osfipin.com/v2/login 1.安装 git yum install -y git 查看版本号:git --version 卸载:yum remo

nginx proxy_redirect指令功能

proxy_redirect 语法:proxy_redirect [ default|off|redirect replacement ] 默认值:proxy_redirect default 使用字段:http, server, location 如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置.假设被代理服务器返回Location字段为: http://localhost:8000/two/some/ur

nginx 反向代理之 proxy_redirect

proxy_redirect 该指令用来修改被代理服务器返回的响应头中的Location头域和“refresh”头域. 语法结构为: proxy_redirect redirect replacement; proxy_redirect default; proxy_redirect off; 错误示例: server { listen 80; server_name www.xxx.com; index index.html; location / { proxy_pass http://12

dns + nginx实现负载均衡

一 搭建环境说明: 服务器公网地址 用途 服务器内网地址 123.56.x.92 Nginx负载兼web服务 10.171.132.57 123.57.x.176 Nginx负载兼Web服务 10.172.235.86 两台服务器上面分别有三个站点,web,app,h5 1  PC站前端    nginx  80 2  H5站前端    nginx+tomcat  28180 3 app客户端   nginx+tomcat  28543 负载均衡实现方式和前提 准备用dns轮询解析来实现负载均衡