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


17

我有一个反向代理设置,用于从Internet访问位于Intranet内的第三方应用程序。假设此应用程序位于URL上:

https://internalserver:8080/ (仅可从Intranet访问)

并且代理处于开启状态:

https://proxyserver/ (可从世界任何地方到达)

该代理由nginx管理,并且可以正常工作。当用户访问时,https://proxyserver/ 他们会在处获得应用程序的内容https://internalserver:8080/

问题在于应用程序正在HTML响应中写入绝对URL,因此,当用户单击指向新页面的链接时,浏览器将尝试使用其内部名称(例如https://internalserver:8080/somepage 而不是) 来定位该页面 https://proxyserver/somepage

我知道这是一个程序错误,但是我无法修改该程序。

我可以使用Nginx拦截响应,修改URL并将其发送(修改)给最终客户端吗?也许还有其他工具?

编辑:我之前看到过此问题,但我的情况更具体,引用的问题要求进行一般性修改。在那种情况下,fast-cgi ad hoc程序是最好的解决方案,我想要的是针对(我认为)更常见情况的一种更具体的解决方案。虽然快速cgi程序可以工作,但我正在寻找一种最简单,可能更强大的方法,并在现实世界中证明了这种情况的解决方案。


Answers:



3

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

ngx_http_sub_module模块是一个过滤器,该过滤器通过将一个指定的字符串替换为另一个指定的字符串来修改响应。

默认情况下未构建此模块,应使用--with-http_sub_module配置参数启用它。

配置示例

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.