Spring MVC“redirect:/”前缀redirect,包含端口号

我一起使用tomcat和nginx来服务我的web应用程序。 nginx侦听端口8085,并将请求转发到端口8084上运行的tomcat。

如果我做了如下的redirect

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

该页面被redirect到端口8084(Tomcat端口)而不是nginx端口(8085)。

我如何redirect到所需的端口?

编辑:我的nginxconfiguration是类似于这样的:

 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; 

在您的配置中使用$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返回:在请求的Host头值,在你的情况下必须是8085的部分。