将一个地址代理到另一个地址

将一个地址代理到另一个地址

我正在尝试将地址代理到具有路径的 IP。以下是我所做的;

<VirtualHost 200.0.0.1:80>
    ServerAdmin [email protected]
    ServerName app.example.com
    ServerAlias app.example.com

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPreserveHost On
    ProxyPass / http://200.0.0.11:8080/some/path/here/
    ProxyPassReverse / http://200.0.0.11:8080/some/path/here/

    ProxyPass /index.html http://200.0.0.11:8080/some/path/here/index.html
    ProxyPassReverse /index.html http://200.0.0.11:8080/some/path/here/index.html

</VirtualHost>

我想要做的是,当用户访问 app.example.com 时,我希望用户看到http://200.0.0.11:8080/some/path/这里/内容而不改变 URL。使用此设置,当用户输入 app.example.com 时,URL 变为 app.example.com/some/path/here/,浏览器会提示“糟糕,您发现了一个无效链接。”

我的错误是什么以及我该如何解决。

答案1

切换“代理”的顺序。如ProxyPass文档

按照配置顺序检查已配置的 ProxyPass 和 ProxyPassMatch 规则。匹配的第一个规则获胜。因此,通常您应该首先从最长的 URL 开始对冲突的 ProxyPass 规则进行排序。否则,较长 URL 的后续规则将被任何使用 URL 前导子字符串的较早规则隐藏。

你可能会评估开启的决定ProxyPreserveHost。这是不寻常的。

如果你想任何事物落在只是“some/path/here/”,即试图删除后面跟着的内容app.example.com/,注意默认情况下,后面跟着的内容app.example.com/都会被附加到的末尾http://200.0.0.11:8080/some/path/here/

处理情况下,你可能不得不使用RewriteRule指示[P] flag设置为代理处理。

另请参阅 Apache 文档使用 mod_rewrite 进行代理

这是一个起点:

RewriteEngine on
RewriteRule ^index.html$ http://200.0.0.11:8080/some/path/here/index.html [P]
RewriteRule ^(.*)$ http://200.0.0.11:8080/some/path/here/ [P]
ProxyPassReverse / http://200.0.0.11:8080/some/path/here/

答案2

从根本上讲,浏览器只有在收到重定向响应时才会更改其 URL 栏中显示的内容。这可能来自后端服务器。如果您将一个 URL 的请求传输到另一个服务器,请确保在传输到的目的地是不同的 URI 授权机构时也正确设置了 Host 标头。

答案3

我有这样的配置:

<VirtualHost *:80>
  ServerName www.c-hack.de
  ServerAlias c-hack.de
  ProxyPreserveHost on
  ProxyPass / http://c-hack01/
  ProxyPassReverse / http://c-hack01/
</VirtualHost>

它运行起来非常好。也许问题出在这个<proxy *>部件上。但老实说,我不知道你到底在那里做什么。

我也这么认为:

ProxyPass /index.html http://200.0.0.11:8080/some/path/here/index.html
ProxyPassReverse /index.html http://200.0.0.11:8080/some/path/here/index.html

不需要,因为它包含在第一个中,因为这一切显然都是递归工作的。

相关内容