Apache Mod Rewrite - 返回url不行

时间:2013-09-11 15:08:21

标签: apache mod-rewrite url-rewriting proxy mod-proxy

我一直在寻找一段时间,但我无法找到适合我案例的解决方案。 所以这是我的情况:

我在我公司安装了一台服务器,我有一台应用程序和一台用作代理的apache服务器。 该服务器可以访问网络上安装的一些设备(专用网络)。这些设备有一个嵌入式网络服务器,我们可以从中配置设备(如家用路由器)。 所以,我想要的是能够代理所有传入的设备请求。 我想要处理的方式是这样的:

用户可以使用该查询:

http://SERVER_IP:9090/10.219.1.1/

所以IP:10.219.1.1实际上是我想要访问的设备的IP。

到目前为止,这就是我所做的:

SetEnvIf Referer ".*(10\.219\.[0-9]{1,3}\.[0-9]{1,3}).*$" routeur_ip=$1
SetEnvIf Request_URI  ".*(10\.219\.[0-9]{1,3}\.[0-9]{1,3}).*$" routeur_ip=$1

RewriteRule ^\/10\.219\.[0-9]{1,3}\.[0-9]{1,3}\/$ http://%{ENV:routeur_ip}/ [P,L]
RewriteRule ^\/10\.219\.[0-9]{1,3}\.[0-9]{1,3}\/(.*)$ http://%{ENV:routeur_ip}/$1 [P,L]
RewriteRule ^\/(themes.*)$ http://%{ENV:routeur_ip}/$1?david=%{ENV:routeur_ip} [P,L]
RewriteRule ^\/(images.*)$ http://%{ENV:routeur_ip}/$1 [P,L]
RewriteRule ^\/(css.*)$ http://%{ENV:routeur_ip}/$1 [P,L]
RewriteRule ^\/(cgi-bin.*)$ http://%{ENV:routeur_ip}/$1 [P,L]
RewriteRule ^\/(js.*)$ http://%{ENV:routeur_ip}/$1 [P,L]
RewriteRule ^\/(favicon.ico)$  http://%{ENV:routeur_ip}/$1 [P,L]

ProxyPassReverse http://SERVER_IP:9090/%{ENV:routeur_ip}/ http://%{ENV:routeur_ip}/

结果: 我可以加载HTML代码,但有两件事不起作用。

  1. 设备上的CSS尝试加载图像,我得到400
  2. 我无法导航设备的菜单,因为HREF标记返回的URL不包括设备IP地址。 例如:HREF看起来像这样:<a href="/cgi-bin/webif/status-network.sh?cat=Network">Network</a>
    所以当我克服它时,它变成:http://10.23.130.107:9090/cgi-bin/webif/status-network.sh?cat=Network 因此返回URL不包括设备的IP地址......
  3. 记录:

    GET MY_IP 200, /10.219.1.1/ | Req_URI:/10.219.1.1/, HTTP_REF: | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /10.219.1.1/cgi-bin/webif/system-info.sh | Req_URI:/10.219.1.1/cgi-bin/webif/system-info.sh, HTTP_REF: | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 401, /10.219.1.1/cgi-bin/webif/system-info.sh | Req_URI:/10.219.1.1/cgi-bin/webif/system-info.sh, HTTP_REF: | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /themes/active/waitbox.css | Req_URI:/themes/active/waitbox.css, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /themes/active/webif.css | Req_URI:/themes/active/webif.css, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /js/styleswitcher.js | Req_URI:/js/styleswitcher.js, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /images/ajax-loader.gif | Req_URI:/images/ajax-loader.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /images/hlogo.gif | Req_URI:/images/hlogo.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /images/cell7.gif | Req_URI:/images/cell7.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 404, /images/cell7.gif | Req_URI:/images/cell7.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /10.219.1.1/cgi-bin/webif/system-info.sh | Req_URI:/10.219.1.1/cgi-bin/webif/system-info.sh, HTTP_REF: | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /js/styleswitcher.js | Req_URI:/js/styleswitcher.js, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /themes/active/waitbox.css | Req_URI:/themes/active/waitbox.css, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /themes/active/webif.css | Req_URI:/themes/active/webif.css, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 400, /themes/vip4g/menu-bg.gif | Req_URI:/themes/vip4g/menu-bg.gif, HTTP_REF:http://SERVER_IP:9090/themes/active/webif.css | ip = - vs - |-|-
    GET MY_IP 400, /themes/vip4g/current-bg.gif | Req_URI:/themes/vip4g/current-bg.gif, HTTP_REF:http://SERVER_IP:9090/themes/active/webif.css | ip = - vs - |-|-
    GET MY_IP 200, /images/ajax-loader.gif | Req_URI:/images/ajax-loader.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /images/hlogo.gif | Req_URI:/images/hlogo.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /10.219.1.1/cgi-bin/webif/system-info.sh | Req_URI:/10.219.1.1/cgi-bin/webif/system-info.sh, HTTP_REF: | ip = 10.219.1.1 vs - |-|-
    GET MY_IP 200, /images/cell7.gif | Req_URI:/images/cell7.gif, HTTP_REF:http://SERVER_IP:9090/10.219.1.1/cgi-bin/webif/system-info.sh | ip = 10.219.1.1 vs - |-|-
    

    我有另一个解决方案,但我不喜欢它。我可以为每个设备IP创建一个本地端口Fowarding(带有ip表),但是服务器上需要很多端口才能这样做,我不认为这是正确的方法。

    任何提示的Thx。

    此致

1 个答案:

答案 0 :(得分:0)

您想要的是一件复杂的事情。您希望更改对主机的所有引用,以在URL上添加IP前缀。

代理指令,默认情况下,只管理HTTP标头内容(如302等)。这就是你已经拥有的。

使用正确的网址重写HTML / JS / CSS内容:

  • mod_proxy_html或其他工具,扫描代理管理的所有数据并在其上应用替换规则。当然,这意味着代理的速度减慢。
  • 在应用程序端管理代理HTTP标头(X-Forwarded-PortX-Forwarded-ProtoX-Forwarded-Host)。知道这些是值列表,第一个是应该在HTML / CSS / Js内容中使用的值。引用维基百科这是这些列表的一般形式:
  

X-Forwarded-For:client,proxy1,proxy2

第二种解决方案意味着您必须对应用程序有深入的了解和力量,并且通常会使用代理上的内容重写器。

另一种行动方式可能是提取其他内容的IP前缀,引用者标题或cookie值。无论如何,您的配置肯定需要一些安全性反射,您允许最终使用您的代理对他选择的IP地址进行查询。