专栏首页运维录Nginx 反向代理 Tomcat 错误示例

Nginx 反向代理 Tomcat 错误示例

开始之前


这篇文章的内容来源 2016年的两篇文章,当时使用 Nginx 反向代理 Tomcat/Resin 出现错误,发现是 proxy_redirect 指令导致的问题,错误的原因令人印象很深刻。

错误是因为没有详细查看指令和参数的含义直接照搬他人的示例配置,这种方式是不可取的因为你们的环境与需求可能是不同的,同样参数配置可能会适合作者但未必能适合你,所以示例配置仅能作参考,务必要结合自己的实际需求做出相应调整。

问题描述


某台测试机安装有 nginx 与 tomcat ,并使用nginx 反向代理 tomcat ,错误表现为访问服务器时会重定向为 tomcat的地址,因为tomcat 是内网服务器地址,最终浏览器返回无法链接错误信息,查看HTTP响应信息 Location 为 http://127.0.0.1:8204/ 。

配置文件


server
{
    #... 其它配置项省略

    location / {
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_pass http://127.0.0.1:8204/;
        proxy_redirect off;   #注意这里
    }
    
    #... 其它配置项省略
}

关于参数含义请参考这篇文章 Nginx Proxy反向代理

问题原因


使用 nginx 反向代理 tomcat 或者 resin服务器,如果出现上述的问题。

请检查nginx配置文件中 proxy_redirect指令是否使用了off选项 ,如果使用了off选项,则关闭所有的 proxy_redirect 指令。

在不确定off参数是否有副作用的情况下可以使用默认选项,即 "proxy_redirect default;" 。

proxy_redirect 指令


语法: proxy_redirect [ default|off|redirect replacement ]
默认值: proxy_redirect default
使用字段: http, server, location
功能: 这个指令用于修改从被代理服务器响应头中的"Location"和"Refresh"字段。

示例

假设

被代理服务器返回的 Location字段为:http://localhost:8080/3g/video

设置

proxy_redirect http://localhost:8080/3g/ http://demo.com/m/;

那么

Location 字段将 重写为 http://demo.com/m/video 。

default 参数

将根据location和proxy_pass 指令的设置来决定,例如下列两个配置等效的。

location /m/ {
    proxy_pass http://upstream:port/3g/;
    proxy_redirect default;
}

location /m/ {
    proxy_pass http://upstream:port/3g/;
    proxy_redirect http://upstream:port/3g/ /m/;
}

off 参数

将在这个字段中禁止所有的 proxy_redirect指令:

proxy_redirect off;
proxy_redirect default;
proxy_redirect http://localhost:8080/ /;

本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx Proxy 知识点解析

    区别只在于proxy_pass转发的路径后是否带 “/”, - 针对不带/, 假如我们访问的url=http://www.abc.com/testa/test....

    用户1560186
  • Django容器(上): 自定义基础镜像

    某个 Python 项目,基于 Python:3.6 与 Django:1.11 框架开发,希望项目能够容器化,然后可以通过 docker-compose 等工...

    用户1560186
  • Nginx Alias别名

    对应的URI为 http://www.demo.com/attachments/mylist.csv 。

    用户1560186
  • LightOJ_1248 Dice (III)

      这就是一个经典的邮票收集问题(Coupon Collector Problem)。

    若羽
  • 从零开始编写网络游戏--基础篇(1)

           最近2周比较忙,没有抽出时间来写Blog,不过在这段时间里面把整个思路理了一遍,梳理了一下大纲,以后会多抽时间来写Blog。

    帘卷西风
  • cf1064E. Dwarves, Hats and Extrasensory Abilities(二分 交互)

    \(n\)次操作,每次你给出一个点的坐标,系统会返回该点的颜色(黑 / 白),程序最后输出一条直线把所有黑点和白点分隔开

    attack
  • uva_1422 Processor

      有n个任务, 每个任务要在规定的时间[l, r]内完成, 工作量为 w, 每个任务可以分开完成。

    若羽
  • ubuntu12.04安装python3

    默认系统已经自带了python2.7。在安装python3.5的时候,不要将python2.7的版本删掉,因为系统本身有很多功能都是需要python2.7的支持...

    py3study
  • Win10下python3和python2多版本同时安装并解决pip共存问题

    特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。

    拓荒者
  • Win10下python3和python2同时安装并解决pip共存问题 Win10下python3和python2同时安装并解决pip共存问题

    特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。

    北京-宏哥

扫码关注云+社区

领取腾讯云代金券