修改由nginx反向代理返回的HTML页面

我为了从互联网访问内部网络中的第三方应用程序设置了一个反向代理。假设这个应用程序的URL是:
https://internalserver:8080/ (只能从内部网络访问)
而代理服务器的URL是:
https://proxyserver/ (可以从世界上任何地方访问)
代理服务器由nginx管理,工作正常。当用户访问https://proxyserver/时,他们会得到https://internalserver:8080/上应用程序的内容。
问题是,应用程序在HTML响应中写入绝对URL,所以当用户点击链接到新页面时,浏览器尝试使用内部名称定位页面,例如https://internalserver:8080/somepage,而不是https://proxyserver/somepage。
我知道这是一个程序错误,但我无法修改该程序。
我能拦截响应,修改URL并将其(修改后)发送给最终客户端吗?或者也许可以使用其他工具实现?

编辑:我之前看到了这个问题,但我的情况更具体,引用的问题是关于一般性修改的。在那种情况下,快速CGI临时程序是最好的解决方案,但我想要的是一个更具体的解决方案,适用于(我认为)更常见的情况。虽然快速CGI程序可以工作,但我正在寻找一个更简单、可能更强大和经过实际验证的解决方案。


1可能是修改nginx代理的数据的重复问题。 - Cristian Ciupitu
2个回答


有任何性能损失吗? - Krunal

http://nginx.org/en/docs/http/ngx_http_sub_module.html

The ngx_http_sub_module module is a filter that modifies a response by replacing one specified string by another.

This module is not built by default, it should be enabled with the --with-http_sub_module configuration parameter.

Example Configuration

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';

  • 相关问题