反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
通俗的说,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,当代理服务器接收到web请求之后,就可以分配给处理指定任务的服务器,或者处于闲置的服务器处理,这样让服务端处理的速度得到提升,当然代理服务器的用处还有更多,例如ajax跨域,服务器安全等需要读者自己去了解。
下图所示,反向代理:
如果要说配置反向代理的服务器,我相信很多人会首选nginx (网上帖子很多),那么我们今天就来讲讲用XAMPP搭建的本地测试环境中的apache 配置。
为了本次的配置演示,我们需要配置几台虚拟的服务器(虚拟主机):
abc.com
lby.com
web.com
配置完最终效果:
我们可以直接使用 127.0.0.1(localhost)地址来访问该域名代理下的三个域名的内容。
例如:现在我们需要访问 lby.com , 我们可以用 127.0.0.1/lby 来访问
本次配置总共分成两大部分:
一 、配置本地hosts 域名解析。
因为是自己设置的虚拟主机域名,所以dns域名解析不了,本地访问的话,我们可以先配置一个本地的解析,用于方便访问,距离配置如下:
在系统c盘目录下找到:C:WindowsSystem32driversetchosts 文件
打开文件后,在最后面追加以下配置:
127.0.0.1 lby.com
127.0.0.1 abc.com
127.0.0.1 web.com
注意:有些时候是保存不了的,因为c盘的文件默认是只读,不可以更改保存,所以需要设置权限允许修改。
二、配置apache 中的虚拟主机和代理。
上面已经域名配置好了,接下来就开始搭建上面的3台虚拟主机吧:
1.在xampp文件夹中打开htdocs(次文件夹默认是xampp服务器的网站根目录):
为了方便,在该文件夹下新建以下3个文件夹用于作为虚拟主机的目录:
第一个:lby
第二个:abc
第三个:web
提醒:可以在这三个目录中,都设置一个index.html页面,分别设置不同的内容,为了方便识别使用。
2.开始配置虚拟主机:
在xampp 文件夹下找到 httpd-vhosts.conf(虚拟主机配置文件):
I:xamppapacheconfextrahttpd-vhosts.conf
打开后添加以下配置(添加到文档的最后面即可):
先配置第一台虚拟主机:(lby.com)
<VirtualHost *:80>
ServerAdmin admin@lby.com
DocumentRoot "/xampp/htdocs/lby"
ServerName lby.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
配置第二台虚拟主机:(abc.com)
<VirtualHost *:80>
ServerAdmin admin@abc.com
DocumentRoot "/xampp/htdocs/abc"
ServerName abc.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
配置第三台虚拟主机:(web.com)
<VirtualHost *:80>
ServerAdmin admin@web.com
DocumentRoot "/xampp/htdocs/web"
ServerName web.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
配置到此,可以开启apache服务器,测试三个域名访问,如果没有其他问题应该可以正常访问!
3.开始配置反向代理:
a.找到 I:xamppapacheconfhttpd.conf
设置httpd.conf,开启代理:
该配置文件中的"#" 代表注释,所以只需要将以下几行内容的注释去掉即可:
第139行: LoadModule proxy_module modules/mod_proxy.so
第142行: LoadModule proxy_connect_modulemodules/mod_proxy_connect.so
第145行: LoadModule proxy_ftp_modulemodules/mod_proxy_ftp.so
第147行: LoadModule proxy_http_modulemodules/mod_proxy_http.so
b.配置代理:
其实配置虚拟主机那个文件(I:xamppapacheconfextrahttpd-vhosts.conf)中,有一个默认的主机就是 localhost, 我们来看下它的默认配置:
<VirtualHost *:80>
ServerAdmin admin@lby.com
DocumentRoot "/xampp/htdocs/"
ServerName localhost
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
上面的这个就是默认的127.0.0.1 主机的配置了,所以我们要在这个主机上配置去代理请求我们设置好的虚拟主机,需要在上面添加以下配置:
<VirtualHost *:80>
ServerAdmin admin@lby.com
DocumentRoot "/xampp/htdocs/"
ServerName localhost
#配置代理清单,注意 /的路径问题
ProxyPass /web http://web.com/
ProxyPass /lby http://lby.com/
ProxyPass /abc http://abc.com/
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
至此,配置完之后保存,重启apache服务
我们就可以使用 127.0.0.1/lby 来访问到原虚拟主机 lby.com的内容了。