У нас есть настройка HAProxy, которая имеет базовую авторизацию на некоторых из наших бэкэндов. Теперь мы хотим включить запросы CORS к нашим бэкэндам, но это не удается для тех, у кого включена базовая аутентификация. Когда CORS выполняет предварительный запрос OPTIONS, он не включает заголовок auth, и поэтому он терпит неудачу, и поэтому запрос не выполняется.
Есть ли способ разрешить запрос 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
.....
Вы можете разрешить запрос 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