Eu trabalho em um aplicativo da Web que faz regularmente chamadas AJAX para um servidor REST que (em produção) é acessado pelo mesmo domínio. Durante o desenvolvimento local, eu tenho redirecionado as chamadas REST para um servidor dev usando o haproxy para contornar as restrições de solicitação de origem cruzada do navegador.
haproxy.cfg
global
maxconn 4096
pidfile ~/tmp/haproxy.pid
defaults
log global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
mode http
timeout connect 300000
timeout client 300000
timeout server 300000
maxconn 2000
option redispatch
retries 3
option httpclose
option httplog
option forwardfor
option httpchk HEAD / HTTP/1.0
frontend dev
bind *:8080 ssl crt /path/to/proxy.pem
acl allow_php path_beg /app/
acl allow_rest path_beg /rest/
use_backend be_php if allow_php
use_backend be_rest if allow_rest
backend be_php
balance roundrobin
server localhost_80 localhost:80
backend be_rest
balance roundrobin
server dev_80 dev.example.com:80
Isso funciona como esperado:
https://localhost:8080/app/login
exibe o mesmo que http://localhost/app/login
https://localhost:8080/rest/test
response é o mesmo que http://dev.example.com/rest/test
O problema surge quando tento configurar o haproxy para SSL entre o HAproxy e os back-ends (que esperam SSL).
De acordo com toda a documentação que li, as alterações a seguir devem estar todas definidas:
backend be_php
balance roundrobin
server localhost_443 localhost:443 ssl verify none
backend be_rest
balance roundrobin
server dev_443 dev.example.com:443 ssl verify none
Mas depois de fazer essas alterações, https://localhost:8080
solicita tempo limite. Tanto o backend php quanto o backend REST podem ser acessados diretamente via https://localhost/app/...
e https://dev.example.com/rest/...
Alguma idéia do que estou fazendo errado?
EDIT: Atualizado para refletir o comentário de @ Michael-sqlbot