haproxy ssl 終止適用於 http 但在 https 上失敗,503 - 在 Virtualbox apache2 ubuntu 18.04 後端伺服器上
我剛剛開始研究 haproxy,我的目標是使用一個前端 ubuntu 和(目前)一個後端燈(ubuntu)設置一個**ssl 終止的負載均衡器。**我的 virtualbox 上的前端和後端機器都是 18.04 ubuntu。我在 Windows 10 上,以防萬一
在過去的幾天裡,我瀏覽了大量的文件和答案,但我仍然無法解決這個問題。
這兩個工作正常:
- 如果我從瀏覽器 ( http ://mysite.testing )通過http訪問它,後端伺服器可以毫無問題地為該站點提供服務
- 如果我通過後端伺服器的 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 堆棧上的源埠。)