Load-Balancing

haproxy ssl 終止適用於 http 但在 https 上失敗,503 - 在 Virtualbox apache2 ubuntu 18.04 後端伺服器上

  • October 18, 2019

我剛剛開始研究 haproxy,我的目標是使用一個前端 ubuntu 和(目前)一個後端燈(ubuntu)設置一個**ssl 終止的負載均衡器。**我的 virtualbox 上的前端和後端機器都是 18.04 ubuntu。我在 Windows 10 上,以防萬一

在過去的幾天裡,我瀏覽了大量的文件和答案,但我仍然無法解決這個問題。

這兩個工作正常:

  1. 如果我從瀏覽器 ( http ://mysite.testing )通過http訪問它,後端伺服器可以毫無問題地為該站點提供服務
  2. 如果我通過後端伺服器的 IP 地址( http://192.168.56.108)直接訪問該站點,則後端伺服器為該站點提供服務沒有問題

注意:後端伺服器上沒有 ssl 證書。但是我已經在 haproxy 機器上設置了一個 mkcert,它工作正常 - green lock n all

什麼不起作用/問題:

當我通過 haproxy ( https ://mysite.testing )訪問https站點時,頁面顯示****503 Service Unavailable - 沒有伺服器可用於處理此請求

我的設置

我已將此行添加到我的主機文件中,這就是我訪問 mysite.testing 的方式:

192.168.56.105 mysite.testing 

我的haProxy.cfg文件:

global
   log /dev/log    local0
   log /dev/log    local1 notice
   chroot /var/lib/haproxy
   stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

   # Default SSL material locations
   ca-base /etc/ssl/certs
   crt-base /etc/ssl/private

   ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
   ssl-default-bind-options no-sslv3
   tune.ssl.default-dh-param 2048

defaults
   log global
   mode    http
   option forwardfor
   option http-server-close
   option  httplog
   option  dontlognull
       timeout connect 5000
       timeout client  50000
       timeout server  50000
   errorfile 400 /etc/haproxy/errors/400.http
   errorfile 403 /etc/haproxy/errors/403.http
   errorfile 408 /etc/haproxy/errors/408.http
   errorfile 500 /etc/haproxy/errors/500.http
   errorfile 502 /etc/haproxy/errors/502.http
   errorfile 503 /etc/haproxy/errors/503.http
   errorfile 504 /etc/haproxy/errors/504.http

frontend FrontEnd_Http
   bind *:80
   reqadd X-Forwarded-Proto:\ http
   default_backend My_Web_Servers

frontend FrontEnd_Https
   bind 192.168.56.105:443 ssl crt /etc/haproxy/ssl/mysite.testing.pem
   mode http
   #reqadd X-Forwarded-Proto:\ https
   default_backend My_Web_Servers


backend My_Web_Servers
   mode http
   balance roundrobin
   server tad108 192.168.56.108

listen stats
   bind :32700
   stats enable
   stats uri /
   stats auth admin:admin

我的apache2 conf文件( /etc/apache2/sites-enabled ):

<VirtualHost *:80>
       ServerName mysite.testing
       ServerAlias www.mysite.testing
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html/mysite.testing/public_html

       ErrorLog /var/www/html/mysite.testing/logs/error.log
       CustomLog /var/www/html/mysite.testing/logs/access.log combined

   <Directory />
               Options FollowSymLinks
               AllowOverride All
       Require all granted
   </Directory>

</VirtualHost>

問題 :

  • 什麼可能導致 503 ?
  • 這是後端 apache2 伺服器或我的前端 haproxy.cfg 的問題嗎?
  • 我該如何解決這個問題,以便讓網站在沒有 503 的情況下使用 https://mysite.testing

非常感謝閱讀:)

當您配置server這樣的…

server tad108 192.168.56.108

…您還沒有告訴 HAProxy 伺服器使用哪個埠來接受流量,因此 HAProxy 假設您打算bind對 HAProxyfrontend上流量到達的可能埠和後端的目標埠進行 1:1 等效映射,所以到達 80 的流量到 80 的伺服器,而到達 443 的流量到 443 的伺服器。這很少是您想要的,通常是將所有流量發送到單個埠,如下所示:

server tad108 192.168.56.108:80

保留初始埠的能力對其他應用程序有一些有趣的可能性,但對於 HTTP 和 HTTPS 很少有用,因為在 中mode http,根據是否配置了選項server,預計是否使用 TLS 。ssl

您還可以使用偏移量保留埠。

<port> 是一個可選的埠規範。如果設置,所有連接都將發送到此埠。如果未設置,將使用客戶端連接的同一埠。埠也可以以“+”或“-”作為前綴。在這種情況下,伺服器的埠將通過將此值添加到客戶端的埠來確定。

http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#server

(此處使用的“客戶端埠”是指客戶端連接的埠,而不是客戶端 TCP 堆棧上的源埠。)

引用自:https://serverfault.com/questions/988487