代理版本 1.7.9 2017/08/18
索引文件中的脚本标记内发出的简单 GET 请求会随机丢失,而是返回自定义 400 错误 html,状态代码为 200。有时连续出现 2-3 次,有时甚至连续出现不到 30 次。它似乎完全是随机出现的。这些是由节点后端静态配置提供的 js 文件。
从后端监听的服务器日志来看,请求似乎没有到达。直接访问文件总是有效的。绕过代理访问后端不会重现该问题。
由于错误显然是自定义错误消息,因此它一定是 HAproxy。添加选项 accept-invalid-http-request 和选项 accept-invalid-http-response 未能解决问题。socat admin 命令未显示任何错误,stat 未将这些错误计入 4xx 响应。
我没有主意了。有人能建议如何检查为什么会发生这种情况吗?
日志在所有请求中包含 ----。因此,索引 HTML 文件请求 7-8 个文件作为依赖项。一些 css、js 文件作为 GET 请求。在所有这些请求中,有时未提供一两个文件,但自定义错误 408 HTML 作为数据提供,响应代码为 200。此响应 200 仅在浏览器上可见,在Uncaught SyntaxError: Unexpected token <
尝试将 HTML 解析为 JS 文件时显示。现在在通过 rsyslog 的日志上,这些请求不会显示。后端也不会记录这些请求。然后,在单击刷新后,将提供对文件集的下一个请求,如果确实提供,则它们的代码为 200。由于我只是不断刷新页面,内容没有改变,所以所有请求都应该显示在所有日志中,代码为 304。...
global
daemon
maxconn 4096
log 127.0.0.1 local2 debug
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
stats socket /var/lib/haproxy/stats
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
tune.ssl.default-dh-param 2048
ssl-server-verify none
stats socket /var/run/haproxy.stat
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 1s
timeout queue 1m
timeout connect 1s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
option forwardfor
option http-server-close
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth stat:stat
errorfile 400 /var/www/html/400.html
errorfile 403 /var/www/html/400.html
errorfile 408 /var/www/html/400.html
errorfile 500 /var/www/html/500.html
errorfile 501 /var/www/html/501.html
errorfile 502 /var/www/html/502.html
errorfile 503 /var/www/html/503.html
errorfile 504 /var/www/html/504.html
option accept-invalid-http-request
option accept-invalid-http-response
当失败时,我在浏览器中识别自定义错误文件400.html的内容。
答案1
正如@Michael-sqlbot 指出的那样,errorfile 408 /var/www/html/408.html
应该被彻底删除。
这不仅仅是一个 chrome 问题,快速搜索一下就会发现 https://www.haproxy.com/blog/haproxy-and-http-errors-408-in-chrome/