nginx反向代理tomcat的问题

何同学
  • 110

大家好,有一个问题想请教一下

问题描述:

location ^~ /tomcat/ {
            proxy_pass   http://127.0.0.1:8080/;
            proxy_redirect  off;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }

location ^~ /ife2017/ {
            proxy_pass   http://127.0.0.1:8080/ife2017/;
            proxy_redirect  off;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            }

以上是我对nginx的部分配置,目的是

1.将www.abc.com/tomcat/xxx 的所有请求,跳转到tomcat上,功能正常

2.将www.abc.com/ife2017/xxx 的所有请求,跳转到tomcat,再通过tomcat跳转到ife2017上,功能不正常

注:ife2017是tomcat根目录下的一个文件夹,未用nginx代理之前是能够正常访问的

具体表现是 www.abc.com/ife2017/123 能够正常跳转,并且不带端口号
而 www.abc.com/ife2017/123/456 就不能正常跳转,会跳转到www.127.0.0.1.com/ife2017/123/456

我现在的解决办法是将127.0.0.1改成实际域名,但这样的话跳转之后会加上端口号8080,虽然问题不大,但还是想要一个完美的解决方法

先谢谢大家了

回复
阅读 3.9k
1 个回答
✓ 已被采纳

反向代理配置的问题,tomcat并不知道他在nginx后面,所以发送的重定向响应头仍然是使用后端的地址。在apache中可以通过配置ProxyPassReverse选项修改后端发给client的响应头来实现,在nginx中没有类似选项,所以在发给后端的请求中添加代理信息来实现(告诉tomcat前面有代理):

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://myapp:8080;
    }
}

参考文档:NGINX Solution for Apache ProxyPassReverse

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏