Apache无法跳转至其他URL问题求助:Redhat Linux服务器配置疑问
看起来你的ProxyPass配置没起作用,咱们一步步来排查问题:
先确认必要模块已加载
Redhat的Apache默认可能没启用mod_proxy和mod_proxy_http模块。你可以执行httpd -M命令,查看输出里有没有proxy_module和proxy_http_module。如果没有,需要在httpd.conf里添加这两行(如果还没加的话):LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so加完后重启Apache,再用
httpd -M验证模块是否加载成功。检查配置语法与生效情况
先运行apachectl configtest(或者httpd -t)检查配置文件有没有语法错误。如果报错,根据提示修正;如果显示Syntax OK,再确认重启Apache时没有报错(可以查看/var/log/httpd/error_log日志)。有时候配置写错了,重启会失败,旧配置还在生效。用
块提升代理规则优先级
如果你original服务器上本身存在/abc这个本地目录,或者有Alias规则匹配/abc,Apache会优先处理本地内容,忽略ProxyPass。这时候把代理规则放到块里,确保它的优先级更高: <Location "/abc"> ProxyPass "http://demo.com/" ProxyPassReverse "http://demo.com/" </Location>替换原来的两行ProxyPass配置,重启Apache再测试。
排查SELinux限制
Redhat的SELinux默认会阻止Apache发起外部网络请求。你可以临时关闭SELinux测试(setenforce 0),如果代理生效了,说明是SELinux的问题。然后永久开启允许Apache联网的规则:setsebool -P httpd_can_network_connect on检查网络连通性与防火墙
在original服务器上,用telnet demo.com 80或者curl http://demo.com测试能不能正常访问demo服务器。如果连不上,检查original的防火墙(firewalld/iptables)是否允许出站到80端口,或者demo服务器的防火墙是否允许original的IP访问。排除浏览器缓存干扰
有时候浏览器会缓存旧的跳转结果,建议用隐私模式打开页面,或者用curl -v http://original.com/abc命令测试,看实际的响应头和内容是不是来自demo服务器。检查demo服务器的响应
确认demo服务器没有返回跳转回original的响应。比如demo的页面里有没有硬编码的original.com链接,或者demo的Apache配置里有没有Rewrite规则强制跳转?可以直接访问http://demo.com看看页面内容,对比访问original.com/abc的内容是否一致。
内容的提问来源于stack exchange,提问作者erTugRul

