我有指向 Cloud9 安装的反向代理设置 (apache2)。代理工作正常,Cloud9 站点出现。但 Cloud9 需要特定浏览器版本,并指出该浏览器不兼容。我已使用最新的 Firefox 和 Chrome 进行了测试。
我对 Apache 和反向代理没有太多经验,但我猜想代理会隐藏浏览器版本。我该如何转发此信息?或伪造已知的工作版本?
答案1
当使用 apache 的 mod_proxy 反向代理到后端服务器时,apache 服务器会对后端服务器执行符合标准 RFC 2616 的 HTTP 代理请求。
这意味着精确的请求数据(方法、标头和正文)被传递到后端,并添加包含原始客户端 IP 的 X-Forwarded-For:标头。
Apache 不会在转发的请求中“弥补”任何内容。
在 cloud9 后端放置一个显示所有请求标头的 CGI 页面,然后将它们与浏览器标头进行比较。
答案2
问题在于 Cloud9 在其 HTML 页面中使用了绝对路径(不太好)。如果您在 Chrome 中打开开发人员工具,您会看到一长串 404 错误。
我通过使用一些 Apache 重写规则解决了该问题:
我当前的 Apache 配置:
RewriteEngine On
RewriteRule ^/socket.io/(.*) /editor/socket.io/$1 [P]
RewriteRule ^/static/(.*) /editor/static/$1 [P]
RewriteRule ^/workspace/(.*) /editor/workspace/$1 [P]
ProxyPass /editor/ http://127.0.0.1:3000/
ProxyPassReverse /editor/ http://127.0.0.1:3000/
<Proxy *>
Order deny,allow
Allow from all
</Proxy>