2014-04-13 08:22:01
来 源
itjs.cn
Apache
本篇分享了Apache服务器配置反向代理的方法,希望对于初学Apache服务器相关的朋友有帮助,更多Apache安装、配置、报错处理等资源请本站内搜索。
反向代理简言之就是通过一台代理服务器,让Internet用户可以访问到内部网络上的服务器。 实验环境:一台带有两块网卡的OB服务器,一块连接外网1.1.1.1,一块连接内网192.168.100.1

1、开启apache的代理模块。修改httpd.conf文件,去掉下面的注释

#LoadModule proxy_module    /usr/lib/apache/modules/libproxy.so 

 LoadModule proxy_module    /usr/lib/apache/modules/libproxy.so 

2、启用请求转发功能。找到<IfModule mod_proxy.c>模块,修改如下

<IfModule mod_proxy.c> 

ProxyRequests Off 

<Directory proxy:*> 

Order deny,allow 

Allow from all  

</Directory> 

</IfModule> 

3、配置反向代理。在httpd.conf文件中的Section 3: Virtual Hosts中进行virtualhost配置

NameVirtualHost 1.1.1.1 

<VirtualHost 1.1.1.1> 

ServerName www.abc.com 

ProxyPass / http://192.168.100.2/ 

ProxyPassReverse / http://192.168.100.2/ 

SetEnv force-proxy-request-1.0 1 

SetEnv proxy-nokeepalive 1 

</VirtualHost> 

还可以重定向到https协议的网址,前提是服务器上要先配置apache的ssl证书

<VirtualHost 1.1.1.1> 

ServerName it.abc.com 

ProxyPass / https://192.168.100.3/ 

ProxyPassReverse / https://192.168.100.3/ 

SetEnv force-proxy-request-1.0 1 

SetEnv proxy-nokeepalive 1 

SSLEngine on 

SSLCertificateFile /etc/ssl/server.crt 

SSLCertificateKeyFile /etc/ssl/private/server.key 

</VirtualHost> 

4、进行测试。对部署的内部服务进行访问时,要对DNS做相应的设置,即DNS可以正常解析到外网网卡上提供的域名

www.abc.com 1.1.1.1 

it.abc.com 1.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 [email protected]

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 [email protected]

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 [email protected]

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 [email protected]

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.

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。