将部分流量重定向到其他服务器

Posted

技术标签:

【中文标题】将部分流量重定向到其他服务器【英文标题】:Redirect a part of traffic to other server 【发布时间】:2015-10-22 21:06:51 【问题描述】:

在我的服务器上,我想通过以下方式重定向通过端口 80 访问的所有流量:

http://12.34.56.78/blahblah/...

到 Python 网络服务器,例如监听端口 7777...

... 其余的 http://12.34.56.78/(anythingelse)/... 到 /home/www/ 使用 Apache。

访问http://12.34.56.78/blahblah/时,我得到:

内部服务器错误

服务器遇到内部错误或配置错误,并且 无法完成您的请求。

为什么它不适用于以下 Apache 配置?

<VirtualHost *:80>
  ServerName 12.34.56.78
  DocumentRoot /home/www/
  <Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
    Require all granted
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerName 12.34.56.78
  <Directory /blahblah/>
    RewriteEngine On
    RewriteRule /(.*)           localhost:7777/$1 [P,L]
  </Directory>
</VirtualHost>

【问题讨论】:

【参考方案1】:

问题只是您正在使用带有 mod_rewrite 的第二个虚拟主机。

RewriteRule 的工作方式是您在 URL 中指定要匹配的路径,然后它会重写为其他内容(或本例中的代理)。

此外,目录元素是指主机上的特定真实目录。根据您的问题,您似乎不希望您的 RewriteRules 在 Directory 元素中。

此外,您应该在代理的 RewriteRule 中指定 URL 方案。

按照这些思路应该可以工作。

<VirtualHost *:80>
  ServerName 12.34.56.78
  DocumentRoot /home/www/
  <Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
    Require all granted
  </Directory>
  RewriteEngine On
  RewriteRule ^/blahblah(.*)$           http://localhost:7777$1 [P,L]
</VirtualHost>

【讨论】:

以上是关于将部分流量重定向到其他服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用GeoIP和.htaccess重定向流量

如何仅使用 AWS 服务重定向流量?

将流量重定向到域

使Java HTTP会话无效以重定向到其他服务器,而无需将用户注销

在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称

Tomcat:如何将外部IP地址访问重定向到其他位置