我的应用程序部署在 haproxy 服务器上,域名为 fireapp.com,下面有两台服务器 server1 和 server2。Haproxy 配置为处理来自 server2 的所有 /live/url 格式的请求。
Server2 contains live apps in format /live/app1, /live/app2
。 所以
http://fireapp.com/live/app1 and fireapp.com/live/app2 are served from server2.
Server1 是 Web 应用程序,其主页加载 iframe。iframe 使用如下 URL
<iframe id="iframe" src="http://fireapp.com/live/app1" width="850px" height="900px" ></iframe>
页面加载时会抛出错误消息,firebug 说 404:网络错误http://fireapp.com/live/app1
。虽然该应用程序在
http://fireapp.com/live/app1 or http://server-2/live/app1.
使用
<iframe id="iframe" src="http://server-2/live/app1" width="850px" height="900px" ></iframe>
可以,但会出现跨域问题,我正试图避免这个问题。我还尝试过只提供相对路径,但第一次加载时又失败了。
<iframe id="iframe" src="/live/app1" width="850px" height="900px" ></iframe>
页面加载后,如果我尝试使用控制台中相同的先前 URL 来更新 iframe 的 src,它就会加载该页面。
更新:Haproxy 文件。
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 50000
timeout client 100000
timeout server 100000
frontend http
bind :80
acl example path_reg -i ^/ey-\b
#acl url_static path_end -i .jpg .gif .png .css .js
acl url_stats path_beg /haproxy-stats
use_backend be_stats if url_stats
use_backend static if example
default_backend app
backend be_stats
stats uri /haproxy-stats
backend static
balance roundrobin
server host1 10.0.0.234:80 check
#server static 10.211.***.***:80 check
backend app
balance roundrobin
server host1 10.0.0.***:80 check
答案1
尝试设置option httpclose
或更好option http-server-close
。
在您的配置中,haproxy 将允许浏览器通过与原始请求相同的保持连接来请求 iframe 内容,而本应确保使用正确服务器的 ACL 将没有机会生效。
每当您使用 ACL 和/或请求操作选项时,您需要确保应用服务器不允许保持客户端连接保持打开。