у нас есть виртуализированный сервер (esxi) с типичной конфигурацией:
[Клиент] https -> [pfsense -> haproxy] - http -> [vm]
И теперь я пытаюсь настроить новый виртуальный сервер с помощью gitlab, и я не могу найти правильную конфигурацию, внутри частной сети gitlab работает правильно, но когда я пытаюсь получить доступ извне, haproxy отвечает с ошибкой 503. Прочитав и попробовав несколько конфигураций, я не могу заставить его работать, я уверен, что это проблема nginx (или я так думаю), поскольку, если на том же сервере я устанавливаю apache (просто для проверки), этот сервер работает правильно снаружи.
Цель примерно такая:
[Клиент] https -> [pfsense -> haproxy] - http -> [gitlab]
Pfsense имеет порты IPEN 80 и 443 (я не уверен, нужно ли нам открывать другой для ssh или единорога)
Некоторые конфигурации:
gitlab.rc
external_url 'https://mydomain.extension'
Haproxy (отлично работает с другими vms)
global
maxconn 10000
stats socket /tmp/haproxy.socket level admin
uid 80
gid 80
nbproc 1
chroot /tmp/haproxy_chroot
daemon
tune.ssl.default-dh-param 2048
server-state-file /tmp/haproxy_server_state
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
frontend http_redirectTo_https
bind publicIP:80 name publicIP:80
mode http
log global
option httpclose
option forwardfor
acl https ssl_fc
http-request set-header X-Forwarded-Proto http if !https
http-request set-header X-Forwarded-Proto https if https
timeout client 30000
redirect scheme https code 301 if !{ ssl_fc }
frontend https_input
bind publicIP:443 name publicIP:443 ssl ssl crt /certs/certific.pem no-sslv3 crt /var/etc/haproxy/https_frontend.pem
mode http
log global
option http-keep-alive
timeout client 30000
acl aclAdm hdr(host) -i adm.domain.ext
acl aclOne hdr(host) -i one.domain.ext
acl aclTwo hdr(host) -i two.domain.ext
acl aclGit hdr(host) -i git.domain.ext
use_backend adm_backend_http_ipvANY if aclAdm
use_backend one_backend_http_ipvANY if aclOne
use_backend two_backend_http_ipvANY if aclTwo
use_backend git_backend_http_ipvANY if aclGit
Я удаляю остальные серверные ВМ
backend git_backend_http_ipvANY
mode http
log global
balance leastconn
timeout connect 30000
timeout server 30000
retries 3
option httpchk OPTIONS /
option forwardfor
option http-server-close
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Forwarded-Proto https if { ssl_fc }
server gitServer private_ip:80 check inter 1000
Думаю, проблема в nginx, спасибо!
Проблема заключалась в том, что haproxy не обнаруживает работоспособность сервера, поэтому мы подозреваем, что конфигурация проверки работоспособности неверна:
option httpchk OPTIONS /
Я просто меняю его на базовую проверку, и haproxy правильно определяет сервер и, по сути, работает нормально.