当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : Apache 反向代理问题, 为什么URL总是自动跳转?
帖子发表于 : 2010-12-13 22:21 
头像

注册: 2008-07-03 19:25
帖子: 125
送出感谢: 0 次
接收感谢: 0 次
如题,这是个反向代理的问题,我有两台机器:

pc1: ubuntu 10.10, apache 2.2.16, ip_address: 192.168.1.129
pc2: redhat enterprise linux 5.5, apache 2.2.3, ip_address: 192.168.1.197

在pc2上面我建立了一个网站, 现在想在pc1上面通过apache反向代理访问到pc2上的网站上。

首先在pc1上面安装了apache的代理模块:
代码:
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http


然后这是我在pc1上面的第一个配置:
代码:
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin example@example.com
   ProxyPreserveHost on
   ProxyPass /197 http://192.168.1.197/
   ProxyPassReverse /197 http://192.168.1.197/
   DocumentRoot /var/www/html/meta3
    ...
</VirtualHost>

浏览器中通过 http://192.168.1.129/197 访问了 192.168.1.197:/var/www/html目录
浏览器中通过 http://192.168.1.129/ 访问了 192.168.1.129:/var/www/html/meta3目录

上面这个配置一切正常,访问也很顺利, 浏览器中输入的url也并没有改变。

然后下面这个配置就出问题了:
代码:
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin example@example.com
   ProxyPreserveHost on
   ProxyPass /197 http://192.168.1.197/a/b/c/d
   ProxyPassReverse /197 http://192.168.1.197/a/b/c/d
   <proxy http://192.168.1.197/a/b/c/d>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>
    DocumentRoot /var/www/html/meta3
    ...
</VirtualHost>


浏览器中通过 http://192.168.1.129/197 访问, 然后URL自动跳到了 http://192.168.1.129/a/b/c/d, 然后提示 "Not Found", 实际上192.168.1.197:/var/www/html/a/b/c/d这个目录里面是有东西的,通过 http://192.168.1.197/a/b/c/d/ 可以正常访问。

我只不过是对代理的目的地做了些改变, 并且设置了权限, 为什么会出现上面的情况呢, URL为什么会自动跳转呢? 我上面的配置有错误吗? :em21


页首
 用户资料  
 
2 楼 
 文章标题 : Re: Apache 反向代理问题, 为什么URL总是自动跳转?
帖子发表于 : 2010-12-14 13:55 
头像

注册: 2008-11-05 13:24
帖子: 1024
送出感谢: 0 次
接收感谢: 5
最后面缺个“/”,你试试,好像是这么回事,一年多没动apache了


_________________
笔记
-------------------------------------
http://blog.163.com/wqt_1101


页首
 用户资料  
 
3 楼 
 文章标题 : Re: Apache 反向代理问题, 为什么URL总是自动跳转?
帖子发表于 : 2010-12-14 20:20 
头像

注册: 2008-07-03 19:25
帖子: 125
送出感谢: 0 次
接收感谢: 0 次
link_01 写道:
最后面缺个“/”,你试试,好像是这么回事,一年多没动apache了


老兄一语点破!
现在我仍然按照上面的配置,在浏览器中输入: “http://192.168.1.129/197/” (注意网址后面多了一个 "/", 原来自动跳转的时候我输入的是 “http://192.168.1.129/197”, 后面没有那个 "/"),就不会出现那个跳转了, 而且可以正常的访问到 192.168.1.197:/var/www/html/a/b/c/d 这个目录。

那么如何兼容呢,即网址后面加不加 "/" 都一样,总不能强制用户非得添加那个 "/" 吧。

我做了下面的尝试:
[1]
现在我更改上面的配置为如下所示(ProxyPass 和 ProxyPassReverse 后面的 "/197" 现在改成了 "/197/", 即在其第一个参数后面加上 "/"):
代码:
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin zmzhang@mail.systemsbiozju.org
   ProxyPreserveHost on
   ProxyPass /197/ http://192.168.1.197/a/b/c/d
   ProxyPassReverse /197/ http://192.168.1.197/a/b/c/d
   <proxy http://192.168.1.197/a/b/c/d>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>
   DocumentRoot /var/www/html/meta3
        ...
</VirtualHost>


结果变成了:
在浏览器中输入: http://192.168.1.129/197 提示“Not Found” 无法访问。
在浏览器中输入: http://192.168.1.129/197/ 又跳转到了http://192.168.1.129/a/b/c/d/, 然后提示“Not Found” 无法访问。

[2]
修改上面的配置如下所示(在ProxyPass和ProxyPassReverse的第二个参数后面添加 "/"):
代码:
zzm@bioinfws-000:~$ more /etc/apache2/sites-available/default
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin zmzhang@mail.systemsbiozju.org
   ProxyPreserveHost on
   ProxyPass /197 http://192.168.1.197/a/b/c/d/
   ProxyPassReverse /197 http://192.168.1.197/a/b/c/d/
   <proxy http://192.168.1.197/a/b/c/d/>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>
   DocumentRoot /var/www/html/meta3
        ...
</VirtualHost>


这个配置是正确的,现在我无论在浏览器中输入 “http://192.168.1.129/197” 或者 “http://192.168.1.129/197/” 都可以正常访问了。顺便说下, 将权限配置写成 “<proxy http://192.168.1.197/a/b/c/d/>” 或者 “<proxy http://192.168.1.197/a/b/c/d>” (注意最后面的 "/")不会我上面的访问测试产生影响,至于这两者对访问权限的测试的影响,我没有测试过。

[3]
修改上面的配置如下所示(在ProxyPass和ProxyPassReverse的两个参数后面都加上"/"):
代码:
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin zmzhang@mail.systemsbiozju.org
   ProxyPreserveHost on
   ProxyPass /197/ http://192.168.1.197/a/b/c/d/
   ProxyPassReverse /197/ http://192.168.1.197/a/b/c/d/
   <proxy http://192.168.1.197/a/b/c/d/>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>
   DocumentRoot /var/www/html/meta3
        ...
</VirtualHost>


结果变成了:
在浏览器中输入: http://192.168.1.129/197 提示“Not Found” 无法访问。
在浏览器中输入: http://192.168.1.129/197/ 可以正常访问。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: Apache 反向代理问题, 为什么URL总是自动跳转?
帖子发表于 : 2010-12-15 13:39 
头像

注册: 2008-11-05 13:24
帖子: 1024
送出感谢: 0 次
接收感谢: 5
引用:
代码:
NameVirtualHost *:80
<VirtualHost *:80>
   ServerAdmin zmzhang@mail.systemsbiozju.org
   ProxyPreserveHost on
   ProxyPass /197/ http://192.168.1.197/a/b/c/d/
   ProxyPassReverse /197/ http://192.168.1.197/a/b/c/d/
   <proxy http://192.168.1.197/a/b/c/d/>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>
   DocumentRoot /var/www/html/meta3
        ...
</VirtualHost>


代码:
ProxyPass /197/ http://192.168.1.197/a/b/c/d/
ProxyPassReverse /197 http://192.168.1.197/a/b/c/d/

这个保留
代码:
<proxy http://192.168.1.197/a/b/c/d/>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>

改成:
代码:
<proxy http://192.168.1.197/a/b/c/d/*>
      AllowOverride None
      Order Deny,Allow
      Allow from all
   </proxy>

如果上面已经没有了问题就下面的步骤就不需要了。
然后激活rewrite模块;
修改或者创建rewrite.conf,目录在mods-enabled下:
代码:
<ifmodule rewrite_module>
rewriteengine on
proxyrequests on
rewriterule /197/^/(.*)$ http://192.168.1.197/a/b/c/d/$1 [p]
</ifmodule>


_________________
笔记
-------------------------------------
http://blog.163.com/wqt_1101


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译