这是我的 apache 反向代理配置:
ProxyHTMLEnable On
ProxyHTMLExtended On
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLInterp On
ProxyPass / http://10.208.202.2:8762/abc/
ProxyPassReverse / http://10.208.202.2:8762/abc/
ProxyPreserveHost On
RequestHeader set Authorization "Basic"
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
问题是当我在服务器上输入 / 时,缺少一些内容。例如 css,一些 .css 应该从 /something/css/wro.css 获取,我假设在这种情况下内容没有被下载,因为代理实际上试图从 /abc/something/css/wro.css 获取它,这是错误的,它返回 404。所以我尝试添加:
ProxyPass /something http://10.208.202.2:8762/something/
ProxyPassReverse /something http://10.208.202.2:8762/something/
但这仍然不起作用,仍然缺少相同的 css 内容。另外,我认为将服务器上的每个位置手动添加到配置中不是一个好主意。我已经添加了代理 html mod,但它似乎在这里不起作用。有什么建议我可以做什么,使它工作,而无需为服务器上的每个位置添加 proxypass 条目?
答案1
但这仍然不起作用,仍然缺少相同的 CSS 内容
Apache 处理 ProxyPass 指令按照顺序宣布,第一场比赛获胜。因此,将更具体的比赛放在首位
ProxyPass /something http://10.208.202.2:8762/something/
ProxyPassReverse /something http://10.208.202.2:8762/something/
ProxyPass / http://10.208.202.2:8762/abc/
ProxyPassReverse / http://10.208.202.2:8762/abc/
是必要的顺序,否则/something
永远不会匹配。
有什么建议我可以做什么,使其工作而无需在服务器上的每个位置添加 proxypass 条目?
基本上,如果您想要提供与代理位置上存在的不同的文件结构,那么通常您必须为默认值的每个例外编写一个 ProxyPass。
如果您想要将默认页面设为http://10.208.202.2:8762/abc/index.html
您网站的默认页面,那么最好使用重定向来实现,否则会弄乱您的页面相关链接。类似这样的方法应该可行;
RedirectMatch ^/$ /abc/