我在 3 台服务器上运行 CentOS。服务器 A 运行我的 apache web 服务器。服务器 B 和 C 在不同的端口上运行其他服务器。我试图让 htt://serverA/math/ 代理到 htt://serverB:8765/,但我遇到了似乎无法修复的错误。这是我在 httpd.conf 文件中的输入:
RewriteEngine On
RewriteRule ^math/(.*)$ http://serverB:8765/$1 [P]
我的日志中出现以下错误:
[error] [client xx.xx.xx.xx] File does not exist: /var/www/html/math
如果我将 httpd.conf 更改为如下形式:
RewriteEngine On
RewriteRule ^/(.*)$ http://serverB:8765/$1 [P]
所有到服务器 A 的流量都被正确重定向到服务器 B,所以我知道 mod_rewrite 和 mod_proxy 正在正常工作。
有人能给我指明正确的方向吗?谢谢。
答案1
我认为你的规则应该是:
RewriteRule ^/math/(.*)$ http://serverB:8765/$1 [P]
由于不匹配,您会收到错误消息
答案2
katriel 是对的,但您也可以使用 ProxyPass/ProxyPassReverse 指令。请参阅这。它的设计旨在以非常简单的方式完成您想要做的事情。
例如:
ProxyPass /math/ http://serverB:8765/
ProxyPassReverse /math/ http://serverB:8765/
答案3
radius 是正确的——你最好使用实际的代理指令。类似这样的操作应该有效:
<Location /math>
ProxyPass http://serverB:8765/
ProxyPassReverse http://serverB:8765/
</Location>
您收到的错误可能是因为您代理的是“.../math/”而不是“.../math”。