我正在尝试设置辅助 Apache 服务器(最终将成为主服务器)。
工作设置是运行 Apache 2.2.6(通过 Wampserver2)的 Windows XP,有 8 个站点(虚拟主机),所有站点均按预期运行。我想升级到更现代的应用程序。为此,我试图(以我复杂的方式)转换到运行 Windows 7 的较新的机器,在该机器上我安装了 Wampserver 2.5 和 Apache 2.4.9。作为一项学习练习,我想尝试让两台服务器一起运行,同时维护所有当前站点,看来使用网关可以实现这一点。
因此,我当前在盒子 A(本地 IP 为 192.168.1.3)上安装了 Apache 2.2.6,路由器(NB604N)将端口 80、443 和 3306 转发到这个盒子/IP,各个站点运行良好(本地和外部)。
我现在还有运行 Apache 2.4.9 的 Box B,其 IP 地址为 192.168.1.2。除了盒子中的原始站点(e:wamp/wwww)之外,我还添加了第二个站点,对于第二个站点,我还设置了一个域。
然后我在盒子 A(apache 2.2.6)(作为网关服务器)上执行以下操作:
a) 按照如下步骤取消对 mod_proxy 模块的注释:-
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
LoadModule headers_module modules/mod_headers.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule php5_module "H:/wamp/bin/php/php5.2.6/php5apache2_2.dll"
b) 将以下内容添加到虚拟主机:-
<VirtualHost *:80>
ServerAdmin [email protected]
Servername www.mt.flnet.org
ProxyPass / http://192.168.1.2/
ProxyPassReverse / http://192.168.1.2
</VirtualHost>
我实际上很惊讶,因为上面的方法显然从一开始就能正常工作(我遇到了 502 错误,但这似乎是由于尾部/最后的斜杠 (/) 造成的,我最终尝试了。我说的“有点工作”是指显然存在一些交互,因为 502 页面(以及后来的 403)会显示:-
**Apache/2.4.9 (Win64) PHP/5.5.12 Server at 192.168.1.2 Port 80**
克服了这个障碍(搜索、阅读,然后尝试了很多方法)并添加了 / 之后,我得到了 403。我也尝试了许多更改,例如添加(到网关服务器,是的,可能不应该来自所有)
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
除了为安装 WAMP 的站点添加虚拟主机和为外部测试站点(即 www.mt.flnet.org)添加虚拟主机之外,我对 B 框没有做太多更改。哦,我确实误读了 Apache 文档,并尝试设置正向代理,并且未注释 mod_proxy 模块加载(除了平衡,我很确定我不需要/不需要)。
我还更改了端口转发,将端口 80 指向盒子 B (192.168.1.2),然后测试成功 (Website Plus 测试显示 OK 而不是 403,并且 proxy.site 显示了预期的页面)。此外,如果我将我的主机文件 (在第三个本地盒子上) 从
192.168.1.3 www.mt.flnet.org
到
192.168.1.2 www.mt.flnet.org
我不明白 403。
我的猜测是,我比较接近了,希望只需要在某处编码正确的权限。但我不知道在哪里。似乎是网关拒绝了访问,因为错误消息位于该网关的日志中,而且如果直接访问,原始服务器也可以正常工作。
我应该说我相当缺乏经验,主要把这当作一种爱好,就像我在 2007-2008 年让盒子 A 运行起来时做的那样。
如果有人能为我指明如何使网关正常工作的正确方向,我将不胜感激。
答案1
我已经设法让它工作了。我做的最后一个更改是添加ProxyRequests 关闭和ProxyPreserveHost 开启虚拟主机配置。
此外,在制定 Proxyrequests 和 ProxyPreserveHost 指令之前,我将 ..... 移至虚拟主机,并添加了位置指令(专业网站管理员 - 如何为特定子域名设置“网关”?)。但是,这些更改并没有改变结果。虚拟主机配置现在如下:-
<VirtualHost *:80>
ServerAdmin [email protected]
Servername www.mt.flnet.org
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.1.2/
ProxyPassReverse / http://192.168.1.2
<Location />
Allow from all
</Location>
</VirtualHost>