我正在尝试在 WHM/CPanel CeEntOS Linux 服务器上安装 Mod_Proxy Apache 模块。以下是系统信息:
CentOS release 5.6 (Final)
Server version: Apache/2.2.21 (Unix)
Cpanel::Easy::Apache v3.7.2 rev9999
我安装的目的是,当我在网站 abc.com 上时,单击指向网站 auto.efg.com 的链接(假设其 IP 地址为 192.168.0.101)时,浏览器将加载 auto.efg.com 上的应用程序,同时在浏览器的地址栏上保留 abc.com。
所以我遵循了这个教程:
http://www.hackersgarage.com/install-mod_proxy-apache-module-on-whmcpanel-ceentos-linux-server.html
因此,当我完成它之后,我能够做到这一点:
root@ip-xxx-xxx-xxx [/tmp/httpd-2.2.21/modules/proxy]# ls -l
/usr/local/apache/modules/mod_proxy*
-rwxr-xr-x 1 root root 88708 Jan 5 08:22 /usr/local/apache/modules/mod_proxy.so*
-rwxr-xr-x 1 root root 49654 Jan 5 08:23 /usr/local/apache/modules/mod_proxy_connect.so*
-rwxr-xr-x 1 root root 73196 Jan 5 08:23 /usr/local/apache/modules/mod_proxy_http.so*
现在,在我按照这些说明并尝试重新启动服务器后,出现以下错误:
/etc/init.d/httpd restart
httpd: Syntax error on line 35 of /usr/local/apache/conf/httpd.conf: module proxy_module is built-in and can't be loaded
你看,发生这种情况是因为我已经在 httpd.conf 中加载了 proxy_module.proxy_http_module 模块,所以我在 /usr/local/apache/conf/httpd.conf 中将它们注释掉了:
# LoadModule proxy_module modules/mod_proxy.so
# LoadModule proxy_http_module modules/mod_proxy_http.so
# LoadModule proxy_connect_module modules/mod_proxy_connect.so
现在该错误已经消失。
我的虚拟主机设置如下:
<VirtualHost 50.63.53.79:80>
ServerName abc.com
ServerAlias www.abc.com
DocumentRoot /home/eagl0028/public_html
ServerAdmin [email protected]
## User eagl0028 # Needed for Cpanel::ApacheConf
<IfModule mod_suphp.c>
suPHP_UserGroup eagl0028 eagl0028
</IfModule>
<IfModule !mod_disable_suexec.c>
SuexecUserGroup eagl0028 eagl0028
</IfModule>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.0.101/
ProxyPassReverse / http://192.168.0.101/
CustomLog /usr/local/apache/domlogs/abc.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
CustomLog /usr/local/apache/domlogs/abc.com combined
ScriptAlias /cgi-bin/ /home/eagl0028/public_html/cgi-bin/
</VirtualHost>
但是,当我运行时:
service httpd stop
service httpd start
然后发布到相对 URL:
<form accept-charset="UTF-8" action="/users/sign_in" class="user_new" id="user_new" method="post">
我期望它会发布到 192.168.0.101,但它没有。我检查了 192.168.0.101 服务器日志,没有收到任何请求。只出现 404 未找到错误,顶部的 URL 是 abc.com/users/sign_in
答案1
您的 VirtualHost 具有 IP 地址+端口对 50.63.53.79:80。这听起来似乎是显而易见的建议,但如果服务器有多个正在侦听的 IP 地址或端口,请确保您的浏览器确实访问了该 IP 地址和端口。如果 POST 访问端口 443 或类似端口,则不会使用此虚拟主机。这可以解释为什么日志中没有显示任何内容。检查主服务器日志,看看您的请求是否到达那里。如果您从本地网络运行测试并且它访问了本地网络 IP 地址,那么肯定会这样做。
如果您在未实际使用的包含文件中拥有此配置,也会触发类似的行为。
在这两种情况下,使用参数手动运行 httpd 二进制文件-S
(确保您包含了进程表中当前正在运行的 apache 进程的所有必要参数)将显示所有已定义的虚拟主机并帮助您发现缺失的虚拟主机,或其他可能捕获流量的地址+端口对。
您可以使用 * 代替 IP 地址来配置虚拟主机以监听所有 IP 地址。
<VirtualHost *:80>
您还可以明确配置多个 IP 地址
<VirtualHost 50.63.53.79:80 192.168.0.101:80>
答案2
href
的意思是http://auto.efg.com/users/sign_in/
将您的浏览器从代理服务器中移除 - Apache 的工作并不是确保页面上的每个链接都让您的浏览器与代理服务器通信。(有一些第三方模块这些修改器会在传输过程中改变页面上的 URL,但它们对除平面 HTML 中的链接以外的任何内容都不起作用)
您可以改变链接以保持方案和主机不变吗?
<a href="/users/sign_in/">clicky</a>