当前位置: 首页 > news >正文

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.

本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1864384

相关文章:

  • 家庭调解员
  • XSS 攻击实验 防御方案
  • ORACLE 笔记
  • 浅析重定向与反弹Shell命令
  • JS设置Excel格式
  • Windows系统磁盘分区详解
  • 使用DELPHI编写一个小的控件
  • android Service控件
  • 当DiscuzNT遇上了Loadrunner(中)
  • Oracle数据字典
  • HDU_2196 Computer (树型dp)
  • 如何选购无线路由器
  • vs2005 vs2008中使用wince5.0 sdk 仿真器
  • 趋势畅想-搭载android系统的智能数码相机
  • abr-summary 和asbr-summary命令中的not-advertise参数
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Golang-长连接-状态推送
  • java 多线程基础, 我觉得还是有必要看看的
  • React-生命周期杂记
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • VUE es6技巧写法(持续更新中~~~)
  • vue 配置sass、scss全局变量
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于字符编码你应该知道的事情
  • 力扣(LeetCode)21
  • 免费小说阅读小程序
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 事件委托的小应用
  • 2017年360最后一道编程题
  • linux 淘宝开源监控工具tsar
  • #pragma data_seg 共享数据区(转)
  • ()、[]、{}、(())、[[]]命令替换
  • (1)Android开发优化---------UI优化
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (阿里云万网)-域名注册购买实名流程
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)springcloud实战之config配置中心
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (一)SpringBoot3---尚硅谷总结
  • **python多态
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net 6.0 处理跨域的方式
  • .NET BackgroundWorker
  • .NET MVC之AOP
  • .NET Standard 的管理策略
  • .NET 反射的使用