我正在尝试设置反向代理,以通过http-ssl(https)提供本地http服务。配置设置如下:
到目前为止,这项工作在nginx中运行良好。不幸的是,后端服务器提供了一些绝对的URL,例如" http://127.0.0.1:8081/....
"在它所服务的网页中。并且这种行为不能(!)被改变。因此,nginx服务器默认传递包含对127.0.0.1的无效引用的页面 - 从客户的角度来看这是错误的。
使用sub_filter规则,所服务的网页应在网页中进行字符串替换。由于我无法修改后端服务器,因此nginx服务器应使用更合适的URL替换http://127.0.0.1
。但这不起作用。事实上似乎根本没有进行任何字符串替换。我尝试替换的任何字符串 - 传递给客户端的网页保持不变。
我的nginx配置如下:
server {
listen 83 default_server;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8081;
sub_filter Test TEST;
sub_filter_once on;
sub_filter_types text/xml text/css text/javascript;
}
}
注意:在这个配置中,我试图替换"测试"与" TEST" (但无济于事)。 "试验"是在后端Web服务器提供的网页中找到的随机选择的字符串。我在这里用作测试对象。真正的替代品应该是" http://127.0.0.1:8081/
"到" /
"之后,即使这个简单的测试也没有成功。
另一个注意事项:在最终配置中,nginx服务器应使用https提供数据。对于测试,上面测试和显示的配置不包括SSL配置。
nginx -V
告诉我nginx已经使用相关模块(--with-http_sub_module
)编译,所以一切都应该有效,不应该吗?
我可能做错了但不幸的是我无法弄清楚我在这里做错了究竟是什么。我在stackoverflow上找到了两个答案,即下面的答案,但没有一个有效:
你能帮忙吗?提前谢谢你的答案。答案 0 :(得分:0)
您好!
您解决了这个问题吗?我认为你需要的是http_realip模块。
来自nginx.org文档:
ngx_http_realip_module 模块用于将客户端地址更改为在指定的标头字段中发送的地址。 默认情况下不构建此模块,应使用 --with-http_realip_module 配置参数启用它。
当您的NGINX服务器位于L7负载均衡器或其他在HTTP标头中传递客户端IP地址的设备后,需要此模块。
这可能有助于< / p>