ylsunyuan技术论坛中心

 找回密码
 注册(请使用中文注册)
搜索
热搜: 活动 交友 discuz
查看: 920|回复: 0
打印 上一主题 下一主题

apache做反向代理服务器

[复制链接]

124

主题

127

帖子

619

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
619
跳转到指定楼层
楼主
发表于 2014-10-29 09:40:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                      apache做反向代理服务器
  apache代理分为正向代理和反向代理:
  1 正向代理: 客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web(需要在客户端的浏览器中设置代理服务器)
  适用于: ①局域网的代理服务器(一般是网关,相当于squid的一般用法)
  ②访问某个受限网络的代理服务器,如教育网访问某些国外网站需要找代理
  2 反向代理: 客户端能访问外部的web,但是不能访问目标web,目标web所在的网络内一台机器充当目标web的代理,客户端直接访问代理就像访问目标web一样(此代理对客户端透明,即客户端不用做如何设置,并不知道实际访问的只是代理而已,以为就是访问的目标)
  适用于: ①idc的某台目标机器只对内开放web,外部的客户端要访问,就让另一台机器做proxy,外部直接访问proxy即相当于访问目标
  ②idc的目标机器的某个特殊的web服务跑在非正常端口如9000,而防火墙上只对外开放了80,此时可在80上做proxy映射到9000,外部访问80即相当于9000
  简单示意图如下
  
  
  
  本例中
  机器192.168.0.114是我们的reverse proxy server
  apache/2.0.63运行在其80端口
  上面有两个域名的虚拟主机
  www.a.org
  www.b.org
  要实现的效果是:
  访问 www.a.org 即相当于访问另一台机器192.168.0.115
  访问 www.b.org 即相当于访问本机的9000端口
  
  apache的proxy功能由其proxy模块实现.加载模块有两种方式:静态和动态,现分别说明:
  一 静态加载
  静态加载,在编译apache时候编译进去,编译参数如下:
  "./configure" \
  "-prefix=/usr/local/apache3" \
  "--enable-so" \
  "--enable-rewrite" \
  "--with-mpm=prefork" \
  "--enable-proxy" \ (这个参数即是代理模块启用)
  安装完成后查看模块列表
  /usr/local/apache3/bin/httpd -l
  显示
  Compiled in modules:
  core.c
  mod_access.c
  mod_auth.c
  mod_include.c
  mod_log_config.c
  mod_env.c
  mod_setenvif.c
  mod_proxy.c
  proxy_connect.c
  proxy_ftp.c
  proxy_http.c
  prefork.c
  http_core.c
  .......
  编辑配置文件 httpd.conf
  在虚拟主机部分
  NameVirtualHost *:80
  <VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  ServerName www.a.org
  ProxyRequests Off
  <Proxy *>
  Order deny,allow
  Allow from all
  </Proxy>
  ProxyPass / http://192.168.0.115/
  ProxyPassReverse / http://192.168.0.115/
  </VirtualHost>
  
  <VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  ServerName www.b.org
  ProxyRequests Off
  <Proxy *>
  Order deny,allow
  Allow from all
  </Proxy>
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/
  </VirtualHost>
  
  二 动态加载
  动态加载:编译进一个已经装好了的apache中(编译为dso模块)
  已经装好的apache在 /usr/local/apache2
  进入apache源码的模块目录进行编译
  cd httpd-2.0.63/modules/proxy/
  /usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_connect.c proxy_http.c proxy_util.c
  从输出里面看到apache的modules目录下已经产生了mod_proxy.so,且已经在httpd.conf中激活了
  cd /usr/local/apache2/conf/
  ls ../modules/ 看到确实有mod_prxoy.so
  编辑配置文件
  vi httpd.conf
  修改如下
  加载模块
  LoadModule proxy_module modules/mod_proxy.so (这句是编译激活时产生的)
  LoadModule proxy_http_module modules/mod_proxy.so (这句是要手动添加的)
  虚拟主机的部分加上
  NameVirtualHost *:80
  <VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  ServerName www.a.org
  ProxyRequests Off
  <Proxy *>
  Order deny,allow
  Allow from all
  </Proxy>
  ProxyPass / http://192.168.0.115/
  ProxyPassReverse / http://192.168.0.115/
  </VirtualHost>
  
  <VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  ServerName www.b.org
  ProxyRequests Off
  <Proxy *>
  Order deny,allow
  Allow from all
  </Proxy>
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/
  </VirtualHost>
  重启apache生效
  
  注:
  如果不加LoadModule proxy_http_module modules/mod_proxy.so,则浏览器页面打不开,页面显示
  Forbidden
  You don't have permission to access / on this server.
  日志acess_log里面显示
  192.168.0.28 - - [03/Jun/2009:16:16:27 +0800] "GET /?sessionId=4293567494722637330&rand=1244014624405&CONTEXT=0&page=com.othe
  r.AjaxWhoWhatUpdate&xrand=1244016991554&wwRandId=1244014624405&wwBugId=2341&wwType=View HTTP/1.1" 403 315
  或者
  192.168.0.28 - - [03/Jun/2009:17:10:32 +0800] "GET / HTTP/1.1" 403 315
  即403错误
  日志error_log里面显示
  [Wed Jun 03 17:08:46 2009] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_p
  roxy, make sure the proxy submodules are included in the configuration using LoadModule.
本文出自 “yahoon的小屋” 博客,请务必保留此出处http://yahoon.blog.51cto.com/13184/162922
                    

Apache反向代理配置方法如下


1、打开Apache的配置文件httpd.conf,找到下面的内容,将注释去掉,以启动代理模块
 LoadModule proxy_module modules/mod_proxy.so
 LoadModule proxy_http_module modules/mod_proxy_http.so

2、在配置文件httpd.conf最后添加
 <IfModule mod_proxy.c>
  ProxyRequests off
  <Proxy /ps>     
   Order deny,allow
   Allow from all
  </Proxy>
  ProxyPass /ps http://127.0.0.1:8080/projects
  ProxyPassReverse /ps http://127.0.0.1
:8080/projects
 </IfModule>



步骤2的功能:访问 http://127.0.0.1/ps/ 时,会重新反向代理访至 http://127.0.0.1:8080/projects


3、重新启动Apache。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册(请使用中文注册)

x
回复

使用道具 举报

本版积分规则

QQ|Archiver|手机版|小黑屋|ylsunyuan技术论坛 ( 桂ICP备14005218号-1

GMT+8, 2024-4-29 23:48 , Processed in 0.058938 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表