PCJ*_*PCJ 27 nginx reverse-proxy
我有一个反向代理设置,用于从 Internet 访问位于 Intranet 内的第三方应用程序。假设此应用程序位于 URL 上:
https://internalserver:8080/
(只能从内联网访问)
并且代理在:
https://proxyserver/
(可从世界任何地方到达)
代理由 nginx 管理并且工作正常。当用户访问时,https://proxyserver/
他们会在https://internalserver:8080/
.
问题在于应用程序在 HTML 响应中写入绝对 URL,因此,当用户单击指向新页面的链接时,浏览器会尝试使用其内部名称定位页面,例如,
https://internalserver:8080/somepage
而不是
https://proxyserver/somepage
。
我知道这是一个程序错误,但我无法修改程序。
我可以拦截响应,修改 URL 并使用 nginx 将其(修改后)发送到最终客户端吗?或者也许使用其他工具?
编辑:我之前看过这个问题,但我的情况更具体,引用的问题要求进行通用修改。在这种情况下,fast-cgi ad hoc 程序是最好的解决方案,我想要的是(我认为)更常见场景的更具体的解决方案。虽然快速 cgi 程序可以工作,但我正在寻找一种最简单、可能更强大并在现实世界中得到证明的解决方案,适用于这种情况。
Jay*_*Tee 26
这是 YouTube 上的官方 Nginx 视频,演示了内联内容重写。
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";
}
Run Code Online (Sandbox Code Playgroud)
小智 6
http://nginx.org/en/docs/http/ngx_http_sub_module.html
ngx_http_sub_module 模块是一个过滤器,它通过将一个指定的字符串替换为另一个来修改响应。
默认情况下不构建此模块,应使用 --with-http_sub_module 配置参数启用它。
示例配置
Run Code Online (Sandbox Code Playgroud)sub_filter </head> '</head><script language="javascript" src="$script"></script>';
归档时间: |
|
查看次数: |
41403 次 |
最近记录: |