Я работаю над веб-приложением, которое регулярно выполняет вызовы AJAX на сервер REST, доступ к которому (в процессе эксплуатации) осуществляется через тот же домен. Во время локальной разработки я перенаправлял вызовы REST на сервер разработки, используя haproxy, чтобы обойти ограничения браузера на кросс-источник запросов.
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
Это работает как ожидалось:
https://localhost:8080/app/login
отображается так же, как http://localhost/app/login
https://localhost:8080/rest/test
ответ такой же, как http://dev.example.com/rest/test
Проблема возникает, когда я пытаюсь настроить haproxy для SSL между HAproxy и бэкэндами (которые ожидают SSL).
Согласно всей документации, которую я прочитал, следующие изменения должны меня полностью настроить:
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
Но после внесения этих изменений https://localhost:8080
время ожидания запросов. И php backend, и REST backend могут быть доступны напрямую через https://localhost/app/...
и https://dev.example.com/rest/...
Есть идеи относительно того, что я делаю неправильно?
РЕДАКТИРОВАТЬ: обновлено, чтобы отразить комментарий @ Michael-sqlbot