Thứ năm, 10/07/2014 | 00:00 GMT+7

Cách thực hiện chấm dứt SSL với HAProxy trên Ubuntu 14.04

HAProxy, viết tắt của High Av available Proxy, là một phần mềm open-souce phổ biến TCP / HTTP Load Balancer và giải pháp proxy có thể chạy trên Linux, Solaris và FreeBSD. Công dụng phổ biến nhất của nó là cải thiện hiệu suất và độ tin cậy của môi trường server bằng cách phân phối dung lượng công việc trên nhiều server (ví dụ: web, ứng dụng, database ). Nó được sử dụng trong nhiều môi trường cấu hình cao, bao gồm: GitHub, Imgur, Instagram và Twitter.

Trong hướng dẫn này, ta sẽ xem xét cách sử dụng HAProxy để chấm dứt SSL, để mã hóa lưu lượng và cân bằng tải các web server của bạn. Ta cũng sẽ hướng dẫn bạn cách sử dụng HAProxy để chuyển hướng truy cập HTTP sang HTTPS.

Hỗ trợ SSL root được triển khai trong HAProxy 1.5.x, được phát hành dưới dạng version ổn định vào tháng 6 năm 2014.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn phải có hoặc có được những thứ sau:

  • Ít nhất một web server , với mạng riêng, nghe trên HTTP (cổng 80)
  • Quyền truy cập root vào một VPS bổ sung mà ta sẽ cài đặt HAProxy. Hướng dẫn cài đặt quyền truy cập root có thể tìm thấy tại đây (bước 3 và 4): Cài đặt server ban đầu với Ubuntu 14.04 .
  • Chứng chỉ SSL và cặp private key có “tên chung” trùng với domain hoặc địa chỉ IP của bạn

Nếu bạn chưa có certificate SSL và cặp private key , vui lòng lấy trước khi tiếp tục. Dưới đây là một số hướng dẫn bao gồm các bước bao gồm việc tạo certificate SSL:

Tạo file khóa / certificate SSL PEM kết hợp

Để triển khai kết thúc SSL với HAProxy, ta phải đảm bảo certificate SSL và cặp khóa của bạn ở định dạng thích hợp, PEM. Trong hầu hết các trường hợp, bạn có thể chỉ cần kết hợp certificate SSL của bạn (tệp .crt hoặc .cer do tổ chức cấp certificate cung cấp) và private key ơng ứng (tệp .key, do bạn tạo). Giả sử file certificate của bạn được gọi là example.com.crt và file private key của bạn được gọi là example.com.key , đây là ví dụ về cách kết hợp các file :

cat example.com.crt example.com.key > example.com.pem sudo cp example.com.pem /etc/ssl/private/ 

Điều này tạo ra file PEM kết hợp, được gọi là example.com.pem và sao chép nó vào /etc/ssl/private . Như mọi khi, hãy đảm bảo bảo mật mọi bản sao của file private key của bạn, bao gồm file PEM (chứa private key ).

Trong một số trường hợp, bạn có thể cần sao chép certificate root CA và certificate trung gian CA vào file PEM của bạn .

Môi trường khởi đầu của ta

Đây là môi trường mà ta đang bắt đầu:

 Server  Web trên HTTP

Nếu môi trường của bạn khác với ví dụ, chẳng hạn như nếu bạn đang sử dụng SSL trên web server hoặc bạn có một server database riêng, bạn có thể điều chỉnh hướng dẫn này để hoạt động với môi trường của bạn .

Nếu bạn không quen với các khái niệm hoặc thuật ngữ cân bằng tải cơ bản, như cân bằng tải lớp 7 hoặc phần backend hoặc ACL, thì đây là bài viết giải thích những điều cơ bản: Giới thiệu về HAProxy và các khái niệm cân bằng tải .

Mục tiêu của ta

Đến cuối hướng dẫn này, ta muốn có một môi trường giống như sau:

Chấm dứt SSL HAProxy

Nghĩa là, user của bạn sẽ truy cập trang web bằng cách kết nối với server HAProxy của bạn qua HTTPS, server này sẽ giải mã phiên SSL và chuyển tiếp các yêu cầu chưa được mã hóa đến web server của bạn (tức là server trong www-backend) thông qua network interface riêng của họ trên cổng 80 . Web server của bạn sau đó sẽ gửi phản hồi của họ đến server HAProxy của bạn, server này sẽ mã hóa phản hồi và gửi lại cho user đã đưa ra yêu cầu ban đầu.

Bạn có thể cài đặt www-backend của bạn với bao nhiêu web server tùy thích, miễn là chúng phục vụ nội dung giống hệt nhau. Nói cách khác, bạn có thể cài đặt điều này với một server duy nhất, sau đó mở rộng quy mô nó ra sau bằng cách thêm bao nhiêu server tùy thích. Lưu ý , khi lưu lượng truy cập của bạn tăng lên, server HAProxy của bạn có thể trở thành nút cổ chai về hiệu suất nếu nó không có đủ tài nguyên hệ thống để xử lý lưu lượng user của bạn.

Lưu ý: Hướng dẫn này không đề cập đến cách đảm bảo web server / ứng dụng của bạn phục vụ cùng một nội dung vì đó thường phụ thuộc vào ứng dụng hoặc web server .

Cài đặt HAProxy 1.6.x

Tạo một VPS mới với mạng riêng. Đối với hướng dẫn này, ta sẽ gọi nó là haproxy-www , nhưng bạn có thể gọi nó bất cứ điều gì bạn muốn.

Trong VPS haproxy-www của ta , hãy thêm PPA chuyên dụng vào apt-get:

sudo add-apt-repository ppa:vbernat/haproxy-1.6 

Sau đó cập nhật bộ nhớ cache apt của bạn:

sudo apt-get update 

Sau đó cài đặt HAProxy 1.6 bằng apt-get bằng lệnh sau:

sudo apt-get install haproxy 

Bây giờ HAProxy 1.6 đã được cài đặt, hãy cấu hình nó!

Cấu hình HAProxy

Tệp cấu hình của HAProxy được đặt tại /etc/haproxy/haproxy.cfg và được chia thành hai phần chính:

  • Global : đặt các thông số cho toàn bộ quá trình
  • Proxy : bao gồm các phần mặc định , lắng nghe , giao diện user backend

, nếu bạn không quen với HAProxy hoặc các khái niệm và thuật ngữ cân bằng tải cơ bản, vui lòng tham khảo liên kết này: Giới thiệu về HAProxy và các khái niệm cân bằng tải .

Cấu hình HAProxy: Global

Tất cả cấu hình HAProxy phải được thực hiện trên VPS HAProxy, haproxy-www của bạn .

Mở haproxy.cfg trong editor :

sudo vi /etc/haproxy/haproxy.cfg 

Bạn sẽ thấy rằng có hai phần đã được xác định: global mặc định .

Điều đầu tiên bạn cần làm là đặt maxconn thành một số hợp lý. Cài đặt này ảnh hưởng đến số lượng kết nối đồng thời mà HAProxy sẽ cho phép, điều này có thể ảnh hưởng đến QoS và ngăn web server của bạn gặp sự cố khi cố gắng phục vụ quá nhiều yêu cầu. Bạn cần phải thử với nó để tìm ra thứ phù hợp với môi trường của bạn. Thêm dòng sau đây (với một giá trị mà bạn nghĩ là hợp lý) đến phần global của cấu hình

   maxconn 2048 

Thêm dòng này, để cấu hình kích thước tối đa của các khóa DHE tạm thời được tạo:

   tune.ssl.default-dh-param 2048 

Tiếp theo, trong phần mặc định , thêm các dòng sau dưới dòng cho biết mode http :

   option forwardfor    option http-server-close 

Tùy chọn forwardfor đặt HAProxy để thêm tiêu đề X-Forwarded-For vào mỗi yêu cầu và tùy chọn http-server-close làm giảm độ trễ giữa HAProxy và user của bạn bằng cách đóng kết nối nhưng vẫn duy trì giữ bí mật.

Cấu hình HAProxy: Số liệu thống kê

Sử dụng thống kê HAProxy có thể hữu ích trong việc xác định cách HAProxy đang xử lý lưu lượng truy cập đến. Nếu bạn muốn bật trang thống kê HAProxy, hãy thêm các dòng sau vào phần mặc định ( user thay thế và password với các giá trị an toàn):

   stats enable    stats uri /stats    stats realm Haproxy\ Statistics    stats auth user:password 

Điều này sẽ cho phép bạn xem trang thống kê HAProxy bằng cách truy cập domain của bạn trên /stats (ví dụ: https://example.com/stats ).

Chưa đóng file cấu hình! Ta sẽ thêm cấu hình proxy tiếp theo.

Cấu hình HAProxy: Proxy

Cấu hình giao diện user

Điều đầu tiên ta muốn thêm là một giao diện user để xử lý các kết nối HTTP đến. Ở cuối file , hãy thêm giao diện user có tên là www-http . Đảm bảo thay thế haproxy_www_public_IP bằng IP công cộng của VPS haproxy-www của bạn:

frontend www-http    bind haproxy_www_public_IP:80    reqadd X-Forwarded-Proto:\ http    default_backend www-backend 

Dưới đây là giải thích về ý nghĩa của mỗi dòng trong đoạn mã cấu hình giao diện user ở trên:

  • giao diện user www-http : chỉ định giao diện user có tên “www-http”
  • bind haproxy_www_public_IP: 80 : thay thế haproxy_www_public_IP bằng địa chỉ IP công khai của haproxy-www. Điều này cho HAProxy biết rằng giao diện user này sẽ xử lý lưu lượng mạng đến trên địa chỉ IP này và cổng 80 (HTTP)
  • reqadd X-Forwarded-Proto: \ http : Thêm tiêu đề http vào cuối phần cuối của yêu cầu HTTP
  • default_backend www-backend : điều này chỉ định rằng bất kỳ lưu lượng nào mà giao diện user này nhận được sẽ được chuyển tiếp đến www-backend , ta sẽ xác định trong bước sau

Tiếp theo, ta sẽ thêm một giao diện user để xử lý các kết nối HTTPS đến. Ở cuối file , hãy thêm giao diện user có tên là www-https . Đảm bảo thay thế haproxy_www_public_IP bằng IP công cộng của VPS haproxy-www của bạn:

frontend www-https    bind haproxy_www_public_IP:443 ssl crt /etc/ssl/private/example.com.pem    reqadd X-Forwarded-Proto:\ https    default_backend www-backend 
  • giao diện user www-https : chỉ định giao diện user có tên “www-https”
  • ràng buộc haproxy_www_public_IP: 443 ssl crt… : thay thế haproxy_www_public_IP bằng địa chỉ IP công khai của haproxy-www và example.com.pem bằng certificate SSL và cặp khóa của bạn ở định dạng pem kết hợp. Điều này cho HAProxy biết rằng giao diện user này sẽ xử lý lưu lượng mạng đến trên địa chỉ IP này và cổng 443 (HTTPS).
  • reqadd X-Forwarded-Proto: \ https : Thêm tiêu đề https vào cuối yêu cầu HTTPS
  • default_backend www-backend : điều này chỉ định rằng bất kỳ lưu lượng nào mà giao diện user này nhận được sẽ được chuyển tiếp đến www-backend , ta sẽ xác định trong bước sau

Cấu hình backend

Sau khi bạn hoàn tất cấu hình các giao diện user , hãy tiếp tục thêm backend của bạn bằng cách thêm các dòng sau. Đảm bảo thay thế các từ được đánh dấu bằng địa chỉ IP riêng tương ứng của web server của bạn:

backend www-backend    redirect scheme https if !{ ssl_fc }    server www-1 www_1_private_IP:80 check    server www-2 www_2_private_IP:80 check 

Dưới đây là giải thích về ý nghĩa của mỗi dòng trong đoạn mã cấu hình backend ở trên:

  • backend www-backend : chỉ định một backend có tên www-backend
  • lược đồ chuyển hướng https if! {ssl_fc} : dòng này chuyển hướng các yêu cầu HTTP đến HTTPS, điều này làm cho trang web chỉ có HTTPS. Nếu bạn muốn cho phép cả HTTP và HTTPS, hãy xóa dòng này
  • server www-1… : chỉ định server backend có tên www-1 , IP riêng (bạn phải thay thế) và cổng mà nó đang lắng nghe, 80 . Tùy chọn kiểm tra làm cho bộ cân bằng tải thực hiện định kỳ kiểm tra tình trạng trên server này
  • server www-2… : tương tự như dòng trước. Thêm các dòng bổ sung như thế này, với tên và địa chỉ IP thích hợp để thêm nhiều server hơn vào bộ cân bằng tải

Bây giờ hãy lưu và thoát khỏi haproxy.cfg . HAProxy hiện đã sẵn sàng để bắt đầu, nhưng trước tiên hãy bật tính năng ghi log .

Bật tính năng ghi log HAProxy

Kích hoạt đăng nhập HAProxy rất đơn giản. Trước tiên, hãy chỉnh sửa file rsyslog.conf:

sudo vi /etc/rsyslog.conf 

Sau đó, tìm hai dòng sau và bỏ ghi chú chúng để kích hoạt nhận log hệ thống UDP. Nó sẽ giống như sau khi bạn hoàn tất:

$ModLoad imudp $UDPServerRun 514 $UDPServerAddress 127.0.0.1 

Bây giờ khởi động lại rsyslog để kích hoạt cấu hình mới:

sudo service rsyslog restart 

Ghi log HAProxy hiện đã được bật! Tệp log sẽ được tạo tại /var/log/haproxy.log sau khi HAProxy được khởi động.

Khởi động HAProxy

Trên haproxy-www , khởi động HAProxy để thay đổi cấu hình của bạn có hiệu lực:

sudo service haproxy restart 

HAProxy hiện đang thực hiện kết thúc SSL và cân bằng tải các web server của bạn! User của bạn hiện có thể truy cập server cân bằng tải của bạn thông qua địa chỉ IP công khai hoặc domain của bộ cân bằng tải, haproxy-www! Có một số điều mà bạn cần kiểm tra đảm bảo mọi thứ được cài đặt chính xác.

Những điều cần kiểm tra

  • Nếu bạn chưa có, hãy cập nhật server định danh của bạn để trỏ domain của bạn tới địa chỉ IP công cộng của server haproxy-www
  • Nếu bạn muốn server của bạn chỉ sử dụng HTTPS, bạn cần đảm bảo web server của bạn (ví dụ: www-1, www-2, v.v.) chỉ lắng nghe địa chỉ IP riêng của chúng trên cổng 80. Nếu không, user sẽ có thể truy cập các web server của bạn qua HTTP (không được mã hóa) trên các địa chỉ IP công cộng của chúng.
  • Truy cập haproxy-www qua HTTPS và đảm bảo nó hoạt động
  • Truy cập haproxy-www qua HTTP và đảm bảo nó chuyển hướng đến HTTPS (trừ khi bạn đã cấu hình nó để cho phép cả HTTP và HTTPS)

Lưu ý: Nếu bạn đang sử dụng một ứng dụng cần biết URL của chính nó, chẳng hạn như WordPress, bạn cần thay đổi cài đặt URL của bạn từ “http” thành https ". Để làm theo ví dụ WordPress, bạn sẽ đi tới Cài đặt chung WordPress của bạn , sau đó thay đổi Địa chỉ WordPress (URL) và Địa chỉ trang web (URL) từ “http” thành “https”.

Kết luận

Đến đây bạn có một giải pháp cân bằng tải xử lý các kết nối SSL của bạn và được dùng để mở rộng môi trường server của bạn theo chiều ngang. Hãy kết hợp những gì bạn đã học được trong hướng dẫn này với các hướng dẫn HAProxy khác để cải thiện môi trường của bạn hơn nữa!


Tags:

Các tin liên quan

Cách sử dụng WP Super Cache và Jetpack Photon để tối ưu hóa hiệu suất WordPress trên Ubuntu 14.04
2014-06-27
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 14.04
2014-06-18
Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
2014-06-17
Cách cài đặt và cấu hình Syncthing để đồng bộ hóa các thư mục trên Ubuntu 14.04
2014-06-16
Cách sử dụng Icinga để giám sát server và dịch vụ của bạn trên Ubuntu 14.04
2014-06-13
Cách sử dụng Logstash và Kibana để tập trung log trên Ubuntu 14.04
2014-06-11
Cách cài đặt Graylog2 và tập trung log trên Ubuntu 14.04
2014-06-06
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên server Ubuntu 14.04
2014-06-05
Cách cấu hình Collectd để thu thập số liệu hệ thống cho Graphite trên Ubuntu 14.04
2014-06-03
Cách cấu hình StatsD để thu thập số liệu thống kê tùy ý cho Graphite trên Ubuntu 14.04
2014-06-03