当我打开“my-website.com”时,整个页面始终无法加载,因为 .css 和 .js 文件似乎以 html 形式提供。只有通过我的负载均衡器访问网站时才会发生这种情况。
我有一个网站托管在 IIS 服务器 (Windows Server 2008R2) 上。IIS 似乎默认正确定义了 MIME 类型,.css 指向 text/css,.js 指向 application/x-javascript。
当我直接通过其 IP 打开网站 (https://host_ip/loginpage) 时,所有文件均能正确加载。当我通过 loadbalancer 打开网站 (我们 dns 中的 my-website.com 指向 haproxy 服务器,然后将其发送到端口 443 上的 IIS 服务器) 时,页面似乎无法完全加载,当我检查浏览器工具时,我看到所有文件都显示“type html”。我还遇到了一些错误,例如:
样式表https://my-website.com/loginpage/Scripts/css/stylesfile.css?cdv=20242058未加载,因为它的 MIME 类型“text/html”不是“text/css”。
发生这种情况是因为文件从技术上来说不是以 .css 结尾(而是 .css?cdv=some_numbers),因此忽略了 IIS MIME 类型规则吗?如果是这样,为什么直接访问网站时不会发生这种情况?
以下是我的 haproxy 配置的一部分:
frontend fe_my-website.com
mode http
bind :443 ssl crt /etc/haproxy/certs/my-cert.pem alpn h2,http/1.1
bind :80
redirect scheme https code 301 if !{ ssl_fc }
stick-table type ip size 5k expire 10h
stick on src
cookie JSESSIONID prefix
# HSTS (63072000 seconds)
http-response set-header Strict-Transport-Security max-age=63072000
# ACLs for my-website.com
acl acl_my-website hdr(host) -i my-website.com
use_backend be_my-website if acl_my-website
# backends
backend be_my-website
mode http
option httpchk
http-request set-path /loginpage
server my-website.com host_ip:443 check ssl verify none
我不是网站开发人员,我只是一名开发人员,因此如果可以通过这种方式解决,我想尝试在 haproxy 方面解决这个问题。无论如何,如果您能想到任何可能的解决方案,我将不胜感激。我在负载平衡器上做错了什么吗?还是我只需要告诉开发人员在他的页面中添加 style="text/css" 和类似内容?
编辑:显然问题出在指令“http-request set-path /loginpage”中。当我执行此操作时,haproxy 会从标头中删除其余信息,然后将文件设置为 text/html。但是,我找不到在不丢失标头信息的情况下将请求发送到特定路径的方法。所以,现在我的问题是,我无法通过 haproxy 将用户从“my-website.com”重定向到“my-website.com/loginpage”,而不会破坏网站。