`
sunyigao
  • 浏览: 3792 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Apache反向代理

 
阅读更多
反向代理简言之就是通过一台代理服务器,让Internet用户可以访问到内部网络上的服务器。
实验环境:一台带有两块网卡的OB服务器,一块连接外网1.1.1.1,一块连接内网192.168.100.1
1、开启apache的代理模块。修改httpd.conf文件,去掉下面的注释
  1. #LoadModuleproxy_module/usr/lib/apache/modules/libproxy.so
  2. LoadModuleproxy_module/usr/lib/apache/modules/libproxy.so
2、启用请求转发功能。找到<IfModule mod_proxy.c>模块,修改如下
  1. <IfModulemod_proxy.c>
  2. ProxyRequestsOff
  3. <Directoryproxy:*>
  4. Orderdeny,allow
  5. Allowfromall
  6. </Directory>
  7. </IfModule>
3、配置反向代理。在httpd.conf文件中的Section 3: Virtual Hosts中进行virtualhost配置
  1. NameVirtualHost1.1.1.1
  2. <VirtualHost1.1.1.1>
  3. ServerNamewww.abc.com
  4. ProxyPass/http://192.168.100.2/
  5. ProxyPassReverse/http://192.168.100.2/
  6. SetEnvforce-proxy-request-1.01
  7. SetEnvproxy-nokeepalive1
  8. </VirtualHost>
还可以重定向到https协议的网址,前提是服务器上要先配置apache的ssl证书
  1. <VirtualHost1.1.1.1>
  2. ServerNameit.abc.com
  3. ProxyPass/https://192.168.100.3/
  4. ProxyPassReverse/https://192.168.100.3/
  5. SetEnvforce-proxy-request-1.01
  6. SetEnvproxy-nokeepalive1
  7. SSLEngineon
  8. SSLCertificateFile/etc/ssl/server.crt
  9. SSLCertificateKeyFile/etc/ssl/private/server.key
  10. </VirtualHost>
4、进行测试。对部署的内部服务进行访问时,要对DNS做相应的设置,即DNS可以正常解析到外网网卡上提供的域名
  1. www.abc.com1.1.1.1
  2. it.abc.com1.1.1.1
这时就可以通过域名对多台内部服务器进行映射访问了
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.

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script> 反向代理简言之就是通过一台代理服务器,让Internet用户可以访问到内部网络上的服务器。
实验环境:一台带有两块网卡的OB服务器,一块连接外网1.1.1.1,一块连接内网192.168.100.1
1、开启apache的代理模块。修改httpd.conf文件,去掉下面的注释
  1. #LoadModuleproxy_module/usr/lib/apache/modules/libproxy.so
  2. LoadModuleproxy_module/usr/lib/apache/modules/libproxy.so
2、启用请求转发功能。找到<IfModule mod_proxy.c>模块,修改如下
  1. <IfModulemod_proxy.c>
  2. ProxyRequestsOff
  3. <Directoryproxy:*>
  4. Orderdeny,allow
  5. Allowfromall
  6. </Directory>
  7. </IfModule>
3、配置反向代理。在httpd.conf文件中的Section 3: Virtual Hosts中进行virtualhost配置
  1. NameVirtualHost1.1.1.1
  2. <VirtualHost1.1.1.1>
  3. ServerNamewww.abc.com
  4. ProxyPass/http://192.168.100.2/
  5. ProxyPassReverse/http://192.168.100.2/
  6. SetEnvforce-proxy-request-1.01
  7. SetEnvproxy-nokeepalive1
  8. </VirtualHost>
还可以重定向到https协议的网址,前提是服务器上要先配置apache的ssl证书
  1. <VirtualHost1.1.1.1>
  2. ServerNameit.abc.com
  3. ProxyPass/https://192.168.100.3/
  4. ProxyPassReverse/https://192.168.100.3/
  5. SetEnvforce-proxy-request-1.01
  6. SetEnvproxy-nokeepalive1
  7. SSLEngineon
  8. SSLCertificateFile/etc/ssl/server.crt
  9. SSLCertificateKeyFile/etc/ssl/private/server.key
  10. </VirtualHost>
4、进行测试。对部署的内部服务进行访问时,要对DNS做相应的设置,即DNS可以正常解析到外网网卡上提供的域名
  1. www.abc.com1.1.1.1
  2. it.abc.com1.1.1.1
这时就可以通过域名对多台内部服务器进行映射访问了
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.

分享到:
评论

相关推荐

    apache反向代理和负载均衡总结

    ### Apache反向代理与负载均衡深入解析 #### 引言 Apache是一款广泛使用的Web服务器软件,不仅能够处理静态页面,还支持动态内容处理,并具备多种高级功能,如反向代理和负载均衡。本文将深入探讨Apache反向代理与...

    apache 反向代理实现 负载均衡

    Apache反向代理是一种网络服务器配置技术,用于将客户端请求转发到后端服务器集群,从而实现负载均衡。在高流量网站或应用中,反向代理能够有效地分发流量,提高服务的稳定性和响应速度,同时也提供了更好的可扩展性...

    apache反向代理

    ### Apache反向代理知识点详解 #### 一、测试环境与网络结构 在开始之前,我们需要了解测试环境的具体配置。本文采用的是Redhat Linux 7.2操作系统,搭配Apache 1.3.24版本,假设公司的域名为company.com。网络...

    linux apache反向代理配置

    linux apache反向代理配置,写的有点乱,但是可以用,里面有说明文档 先弄 apache和tomcat整合 把80端口给apache 举例 tomcatA 8080 tomcatB 8081 在apache的httpd.conf里写反向代理,用户名指向tomcat的端口,具体...

    apache反向代理weblogic

    以上就是Apache反向代理WebLogic的基本步骤和关键知识点,通过这种方式,你可以构建一个高效、安全的Web应用架构。在实际部署中,还需要考虑更多的细节,如SSL证书配置、安全策略、性能调优等。

    apache反向代理+负载均衡.txt

    Apache负载均衡和反向代理配置文件开启的模块及代码配置方法。。。。。。。。。。。。。。。。。。。

    Apache反向代理及负载均衡部署文档

    ### Apache反向代理及负载均衡部署详解 #### 一、Apache与IIS的反向代理和负载均衡背景 随着互联网应用的不断扩展和技术的发展,如何有效地处理大量的并发请求成为了一个重要的问题。在这种背景下,反向代理和负载...

    IIS与Apache反向代理

    【IIS与Apache反向代理】是指在一台服务器上,结合使用Microsoft的Internet Information Services (IIS) 和Apache HTTP Server,实现两者之间的协同工作,通过反向代理技术将请求分发到不同的服务环境中。...

    apache反向代理安装配置

    介绍如何使用apache进行反向代理的配置,以及配置中遇到的一些问题如何解决

    linux下安装apache的及反向代理配置完整过程

    Linux 下安装 Apache 及反向代理配置完整过程 Linux 操作系统下安装 Apache 服务器是一件复杂的任务,需要逐步完成多个步骤。本文将详细介绍 Linux 下安装 Apache 及反向代理配置的完整过程。 安装 Apache 安装 ...

    apache tomcat 反向代理502错误.txt

    apache tomcat 反向代理,http502错误,百度搜的解决不了问题 a.com 可以访问,www.a.com 无法访问http502错误

    配置Apache双向认证和反向代理(Apache+配置文档)

    windows下配置Apache双向认证和反向代理(Apache+配置文档)

    apachec反向代理使用的问题

    反向代理反向代理反向代理反向代理反向代理反向代理反向代理反向代理反向代理

Global site tag (gtag.js) - Google Analytics