这两天一直用 WordPress 在做一个网站,在部署网站的时候遇到了一些困难。服务器是 Windows Server 2008 的,之前上面已经有 Tomcat 了,现在想在 Apache 下来跑 WordPress。两台服务器同时监听80端口显然是不行的,很容易想到一台服务器监听80端口,另一台服务器监听另一个端口,比如说8080端口,然后通过转发来实现 Tomcat 和 Apache 并存。那么如何实现这种转发呢?反向代理!

什么是反向代理?反向代理的意思就是用代理服务器来接受客户端的连接请求,然后将请求转发给的另一台服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。说白了就是 A 向 B 发起 http 请求,B 将请求转给 C,从C获取到内容,然后返回给 A,这时候 A 只知道内容是从 B 那里来的,不知道是不是经过转发什么的。

apache 下如何配置反向代理呢?首先在http.conf文件中开启下面四个模块,即去掉前面的#注释。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so

下面开启反向代理

ProxyRequests Off  #开启反向代理 
<Proxy *>  #允许所有访问者使用反向代理
Order deny,allow
Allow from all
<Proxy>

之后需要建立虚拟主机,这样可以在同一台机器搭建属于不同域名或者不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名。 可以通过Include conf/extra/httpd-vhosts.conf,然后修改httpd-vhosts.conf文件来实现。

NameVirtualHost *:80

<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/ #反向代理转发给本机的8080端口
ServerName example1.com
<VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example2.com
DocumentRoot “D:/a/b/c”

<Directory “D:/www/test”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<Directory>

ErrorLog “logs/2-error.log”
CustomLog “logs/2-access.log” common
<VirtualHost>

Apache 在接受到请求时,首先会默认第一个VirtualHost,然后再找匹配的,如果没有匹配的,就是第一个VirtualHost起作用。上面的设置virtualhost 均为80,通过域名的不同来区分。最后让原有的服务器 Tomcat 监听8080端口即可实现二者并存。

参考网址:

http://www.cnblogs.com/zemliu/archive/2012/04/18/2454655.html

http://www.cnblogs.com/wpjsolo/archive/2012/01/19/2327457.html