在nginx中编辑标题值

在nginx中编辑标题值,nginx,Nginx,背景 所以我有一个运行tomcat应用程序的服务器,隐藏在Apache代理后面。该代理提供了一个更加用户友好的url以及带有自动重定向的SSL加密,因此该应用程序只能通过https访问 我正忙着将其迁移到nginx代理 我遇到的一个问题是,在登录时,我的应用程序在http响应中以 http://192.168.x.x:8080/myapp/index.jsp. 返回的IP地址来自代理服务器,在internet上不可见。因此,浏览器在尝试导航到它时会出现连接错误 作为一种解决方法,我使用了ng

背景
所以我有一个运行tomcat应用程序的服务器,隐藏在Apache代理后面。该代理提供了一个更加用户友好的url以及带有自动重定向的SSL加密,因此该应用程序只能通过https访问

我正忙着将其迁移到nginx代理

我遇到的一个问题是,在登录时,我的应用程序在http响应中以

http://192.168.x.x:8080/myapp/index.jsp. 
返回的IP地址来自代理服务器,在internet上不可见。因此,浏览器在尝试导航到它时会出现连接错误

作为一种解决方法,我使用了nginx指令:

  • proxy_hide_标头:隐藏从代理服务器返回的LocationAfterLogin标头
  • add_header:添加新的LocationAfterLogin url
因此,我的配置如下所示

            #header for location after logon of demo app
            add_header LocationAfterLogon http://example.com/demo/index.jsp;
            #hide the real LocationAfterLogon
            proxy_hide_header LocationAfterLogon;
问题
我需要能够在LocationAfterLogon上执行regex替换或类似操作,因为它并不总是指向index.jsp,这取决于登录页面截获的url

我知道我也可以重写tomcat应用程序,以发送回一个相对URL,但我想在nginx config中完成这一切

我也读过关于nginx more_set_头的文章。我还没试过。它允许我编辑标题吗

Apache有我之前使用的头编辑指令,所以我正在寻找类似的东西

TL;DR

是否可以在Nginx中使用regex replace或类似工具编辑标题位置?

您可以使用
map
指令重写标题:

 map $upstream_http_locationafterlogon $new_location {
     ~regexp   new_value;
 }

 proxy_hide_header LocationAfterLogon;
 add_header LocationAfterLogon $new_location;

请参阅文档:

为什么它在登录后发送
LocationAfterLogon
而不是
Location
?Nginx自动“修复”
location
header。