我正在尝试将地址代理到具有路径的 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
不需要,因为它包含在第一个中,因为这一切显然都是递归工作的。