【问题标题】:Spring MVC “redirect:/” prefix redirects with port number includedSpring MVC “redirect:/”前缀重定向,包含端口号
【发布时间】:2013-12-14 19:11:38
【问题描述】:

我同时使用 tomcat 和 nginx 来为我的 Web 应用程序提供服务。 nginx监听8085端口,将请求转发给运行在8084端口的tomcat。

如果我执行如下重定向:

@RequestMapping("/test")
public String test() {
    return "redirect:/";
}

页面被重定向到端口 8084(Tomcat 端口)而不是 nginx 端口(8085)。

如何重定向到所需的端口?

编辑: 我的nginx配置是这样的:

server {
    listen 8085;
    server_name www.mydomain.com;

    location /{
        proxy_pass http://127.0.0.1:8084;
        include /etc/nginx/conf.d/proxy.conf;
    }
}

和/etc/nginx/conf.d/proxy.conf的内容:

proxy_redirect off;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 8m;
client_body_buffer_size 256k;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_buffer_size 4k;
proxy_buffers 32 256k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 256k;

【问题讨论】:

  • 你能添加你的nginx配置吗?

标签: spring spring-mvc redirect nginx


【解决方案1】:

在您的配置中使用 $server_port 而不是 $proxy_port 部分。

改变这一行

proxy_set_header Host $host:$proxy_port;

proxy_set_header Host $host:$server_port;

Catalina 的HttpServletResponse.sendRedirect 实现使用getServerPort 方法来构建绝对 重定向url (Location Header-Value)。 getServerPort 从请求的 HostHeader-Value 中返回 : 之后的部分,在您的情况下它必须是 8085

【讨论】:

  • 如您在回答中所述,如果 nginx 端口为 80,则您的解决方案有效。但出于测试目的,我也需要它适用于其他端口(例如我的问题中的 8085)。
猜你喜欢
  • 2018-06-13
  • 2011-02-07
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2016-11-11
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多