由于CORS(跨源资源共享),服务器正在接收数千个OPTIONS请求.现在,每个选项请求都被发送到其中一个服务器,这有点浪费,因为知道HAProxy可以在没有Web服务器帮助的情况下自己添加CORS头.
frontend https-in
...
use_backend cors_headers if METH_OPTIONS
...
backend cors_headers
rspadd Access-Control-Allow-Origin:\ https://www.example.com
rspadd Access-Control-Max-Age:\ 31536000
Run Code Online (Sandbox Code Playgroud)
但是为了实现这一点,我需要在cors_headers后端指定至少一个实时服务器,该服务器仍将接收请求.
如何在不指定任何服务器的情况下处理后端中的请求?如何将请求传播到服务器,同时将响应发送到浏览器并保持连接活动?
我想配置 haproxy 通过返回以下内容来处理 CORS:
<Header name="Access-Control-Allow-Origin">*</Header>
<Header name="Access-Control-Allow-Headers">Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId</Header>
<Header name="Access-Control-Max-Age">3628800</Header>
<Header name="Access-Control-Allow-Methods">GET, DELETE, OPTIONS, POST, PUT</Header>
Run Code Online (Sandbox Code Playgroud)
但是,我得到的是“请求的资源上不存在‘Access-Control-Allow-Origin’标头”。注意我使用的是 haproxy 1.7.9 并且无法使用 lua 编译。
我已经查看了https://www.haproxy.com/blog/enabling-cors-in-haproxy/但无法用 lua 重新编译。
global
log 127.0.0.1 local0
log-send-hostname
chroot /etc/haproxy
pidfile /var/run/haproxy.pid
maxconn 40000
user haproxy
group haproxy
daemon
nbproc 2
tune.ssl.cachesize 100000
tune.ssl.default-dh-param 2048
defaults
log global
log-format %ci:%cp\ [%t]\ %ft\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %U\ %CC\ \ %CS\ …Run Code Online (Sandbox Code Playgroud)