java - nginx 中代理服务器发出重定向时如何更改位置 header

标签 java angularjs nginx jetty

我有在jetty服务器上运行的java应用程序,其中后端是java Rest Web服务,前端是使用Angular JS完成的。当我的 JSESSIONID cookie 过期时,nginx 会响应 302 重定向以进行其余 api 调用。例如http://www.example.com/rest/myapi将返回 302 并将位置 header 设置为 http://www.example.com/ 。在这种情况下,浏览器将进行内部重定向到我的主页。有什么方法可以将位置 header 重写为 www.example.com/rest/myapi 这样我就可以在使用 302 执行内部重定向时获得从浏览器调用的正确 api。这是我的其余 api 的 nginx 配置。

# Reverse proxy to the java API.
location ~ ^/rest|redeem|gym|registrant|review|gymview|resources {       
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Connection "";
    proxy_set_header X-Scheme $scheme;
    proxy_pass http://api;
    proxy_http_version 1.1;
    proxy_connect_timeout 60;
    proxy_read_timeout 180;
}

我如何重写位置 header 以再次调用相同的 api,因为它调用我的主页并获取 HTML 响应而不是 JSON,这会破坏我的页面。 预先感谢您!!

最佳答案

1) 您可以解决 Java 应用程序中的重定向问题,这样您就可以返回一些带有 401(未经授权)响应代码的 JSON,而不是将用户重定向到主页并显示 HTML 页面。

2) 当然,您也可以使用 proxy_redirect 将它们获取到主页以外的任何位置。 例如

   proxy_redirect   ~https://$host/       https://$host/rest/myapi;

但是要聪明一点 - 如果请求来自这个特定的 URL,您将进入重定向循环。

关于java - nginx 中代理服务器发出重定向时如何更改位置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755941/

相关文章:

Java - 将 null 作为参数传递给 print()

Java内存文件结构?

AngularJS 手动渲染 Controller 和模板

html - Angularjs data-ng-repeat 不起作用

ruby-on-rails - 在 UNIX 套接字中运行 Rails Server

java - 是否可以选择在不禁用 CardLayout 的情况下添加 ScrollPane?

java - 这是Java中释放资源的安全方法吗?

javascript - 在 javascript 中检索 JSON 数据时出现问题

python - Flask Ansible 通过主管启动时出错

Nginx 反向代理 Websocket 身份验证 - HTTP 403