我有一个反向代理服务器设置,用于访问位于Intranet内的Internet上的第三方应用程序。 假设这个应用程序在URL上:
https://internalserver:8080/ (只能从内网访问)
和代理是在:
https://proxyserver/ (可从世界任何地方访问)
代理由nginxpipe理,工作正常。 当用户访问https://proxyserver/他们将在https://internalserver:8080/处获取应用程序的内容。
问题是应用程序正在HTML响应中写入绝对URL,因此,当用户单击一个新页面的链接时,浏览器正在尝试使用其内部名称来定位页面,例如https://internalserver:8080/somepage https://proxyserver/somepage 。
我知道这是一个程序错误,但我无法修改程序。
我可以拦截响应,修改URL并使用nginx将其发送(修改)到最终客户端? 或者也许用另一种工具?
编辑:我之前看到这个问题 ,但我的情况是更具体的,引用的问题要求一个通用的修改。 在这种情况下,fast-cgi ad hoc程序是最好的解决scheme,我想要的是一个更具体的解决scheme(我认为)更常见的情况。 而一个快速CGI程序可以工作,我正在寻找一个最简单,也许更强大,certificate到现实世界,这种情况下的解决scheme。
这里是一个官方的YouTube上的Nginxvideo演示内联内容重写。
https://youtu.be/7Y7ORypoHhE?t=20m22s
确实与sub_filter
http://nginx.org/en/docs/http/ngx_http_sub_module.html
就你而言,你正在看像这样的东西:
location / { sub_filter_once off; sub_filter_types text/html; sub_filter "https://internalserver:8080" "https://proxyserver"; }
http://nginx.org/en/docs/http/ngx_http_sub_module.html
ngx_http_sub_module模块是一个通过将一个指定的stringreplace为另一个指定的string来修改响应的filter。
这个模块不是默认生成的,它应该使用–with-http_sub_moduleconfiguration参数来启用。
示例configuration
sub_filter </head> '</head><script language="javascript" src="$script"></script>';