在 HAProxy 中禁用预检 OPTIONS 请求的授权

在 HAProxy 中禁用预检 OPTIONS 请求的授权

我们有一个 HAProxy 设置,它在我们的一些后端上具有基本身份验证。我们现在想启用对后端的 CORS 请求,但对于那些启用了基本身份验证的后端来说,这是失败的。当 CORS 发出预检 OPTIONS 请求时,它不包含身份验证标头,因此它会失败,因此请求会失败。

有没有办法允许 OPTIONS 请求无需授权,但强制所有其他请求也这么做?

我们的 haproxy.cfg 有以下与此相关的部分:

#User lists used to enforce HTTP Basic Authentication
...
userlist ul_hyknpj6tb-uakf5isp
  user fred password $6$H/M21cSsvXn$jlEZQV7QL/clhV7JtZkAQf34QAPfZq5sE.zLE.M3gi4K1DV5J6ppc.e1JAOP0CtVxM0.n157llg5tsTp0gPFj1
....
backend b_term_hyknpj6tb-uakf5isp
  mode http
  balance roundrobin
  option forwardfor
  stick-table type ip size 1k expire 30s store bytes_in_rate(1s),bytes_out_rate(1s)
  tcp-request content track-sc2 src
  tcp-request inspect-delay 200ms
  tcp-request content accept if ! too_many_req
  tcp-request content accept if WAIT_END  
  rspadd Strict-Transport-Security:\ max-age=16000000;\ includeSubDomains
  acl is_auth http_auth(ul_hyknpj6tb-uakf5isp)
  http-request auth realm iiboc if !is_auth
  server node_hyknpj6tb-uakf5isp_1000 192.31.11.70:7843 check ssl verify required crt fred/fred-internal.pem ca-file bob/bob-internal.cert.pem 
.....

答案1

您可以通过在不需要身份验证的不同后端处理这些请求来允许未经授权的 OPTIONS 请求:

frontend fe_main
    acl options_method method OPTIONS
    use_backend be_options if options_method

在哪里be_options是类似于的后端b_term_hyknpj6tb-uakf5isp但没有http 请求身份验证领域 iiboc if !is_auth

相关内容