nginx中的http_sub_module似乎不起作用

时间:2015-08-29 23:45:32

标签: nginx reverse-proxy

我正在尝试设置反向代理,以通过http-ssl(https)提供本地http服务。配置设置如下:

  • 后端服务器侦听127.0.0.1:8081,因此只接收来自localhost的连接。它为所有没有(!)压缩的网页提供服务。
  • 前端服务器(= nginx)侦听端口83并提供从127.0.0.1:8081获取的数据

到目前为止,这项工作在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上找到了两个答案,即下面的答案,但没有一个有效:

你能帮忙吗?提前谢谢你的答案。

1 个答案:

答案 0 :(得分:0)

您好!

您解决了这个问题吗?我认为你需要的是http_realip模块。

来自nginx.org文档:

  

ngx_http_realip_module 模块用于将客户端地址更改为在指定的标头字段中发送的地址。   默认情况下不构建此模块,应使用 --with-http_realip_module 配置参数启用它。

当您的NGINX服务器位于L7负载均衡器或其他在HTTP标头中传递客户端IP地址的设备后,需要此模块。

这可能有助于< / p>