从根部代理 HTTPS 上的 Websocket - HAProxy
Proxy Websocket on HTTPS from the root - HAProxy
我有一个awsELB
,在ELB后面我有一个HAProxy
这是代理配置文件。
cat /etc/haproxy/haproxy.cfg
frontend http-traffic
bind *:80
acl is_websocket hdr(Upgrade) -i WebSocket
redirect scheme https if is_websocket
use_backend websocket if is_websocket
default_backend tomcat
frontend https-traffic
bind *:443 ssl crt /etc/ssl/private/gayan.pem
reqadd X-Forwarded-Proto:\ https
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend websocket if is_websocket
default_backend tomcat
backend tomcat
reqirep ^([^\ :]*)\ /(.*) \ /ImageServlet
server tc 172.20.135.97:8080
backend websocket
reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo
server ws demos.kaazing.com:443/echo ssl verify none
我想做的是,wss://<ELB_A_RECORD>
它应该代理到 demos.kaazing.com/echo
websocket。
但是我遇到 403
错误。
我做错了什么吗?
这几乎肯定会导致不正确的 HTTP 请求:
reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo
Host
头只是主机头,不是头和路径。错误消息应该是 400 Bad Request
,因为这会导致格式错误的请求。
尝试删除该行,然后添加以下内容:
http-request set-header Host demos.kaazing.com
http-request set-path /echo
我有一个awsELB
,在ELB后面我有一个HAProxy
这是代理配置文件。
cat /etc/haproxy/haproxy.cfg
frontend http-traffic
bind *:80
acl is_websocket hdr(Upgrade) -i WebSocket
redirect scheme https if is_websocket
use_backend websocket if is_websocket
default_backend tomcat
frontend https-traffic
bind *:443 ssl crt /etc/ssl/private/gayan.pem
reqadd X-Forwarded-Proto:\ https
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend websocket if is_websocket
default_backend tomcat
backend tomcat
reqirep ^([^\ :]*)\ /(.*) \ /ImageServlet
server tc 172.20.135.97:8080
backend websocket
reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo
server ws demos.kaazing.com:443/echo ssl verify none
我想做的是,wss://<ELB_A_RECORD>
它应该代理到 demos.kaazing.com/echo
websocket。
但是我遇到 403
错误。
我做错了什么吗?
这几乎肯定会导致不正确的 HTTP 请求:
reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo
Host
头只是主机头,不是头和路径。错误消息应该是 400 Bad Request
,因为这会导致格式错误的请求。
尝试删除该行,然后添加以下内容:
http-request set-header Host demos.kaazing.com
http-request set-path /echo