Thứ tư, 19/04/2017 | 00:00 GMT+7

Cách lưu trữ nhiều trang web với Nginx và HAProxy bằng LXD trên Ubuntu 16.04

Vùng chứa Linux là một group các quy trình được tách biệt với phần còn lại của hệ thống thông qua việc sử dụng các tính năng bảo mật của nhân Linux, chẳng hạn như không gian tên và group điều khiển. Nó là một cấu trúc tương tự như một máy ảo, nhưng nó nhẹ hơn nhiều; bạn không có chi phí để chạy một kernel bổ sung hoặc mô phỏng phần cứng. Điều này nghĩa là bạn có thể dễ dàng tạo nhiều containers trên cùng một server . Sử dụng containers Linux, bạn có thể chạy nhiều version của toàn bộ hệ điều hành, được giới hạn, trên cùng một server hoặc gói ứng dụng của bạn và các phần phụ thuộc của nó trong một containers mà không ảnh hưởng đến phần còn lại của hệ thống.

Ví dụ: hãy tưởng tượng rằng bạn có một server và bạn đã cài đặt một số dịch vụ, bao gồm cả các trang web, cho khách hàng của bạn . Trong cài đặt truyền thống, mỗi trang web sẽ là một server ảo của cùng một version của web server Apache hoặc Nginx. Nhưng với containers Linux, mỗi trang web sẽ được cấu hình trong containers riêng, với web server riêng.

Ta có thể sử dụng LXD để tạo và quản lý các containers này. LXD cung cấp dịch vụ siêu giám sát để quản lý toàn bộ vòng đời của các container .

Trong hướng dẫn này, bạn sẽ sử dụng LXD để cài đặt hai trang web dựa trên Nginx trên cùng một server , mỗi trang được giới hạn trong containers riêng. Sau đó, bạn sẽ cài đặt HAProxy trong containers thứ ba sẽ hoạt động như một Reverse Proxy . Sau đó, bạn sẽ định tuyến lưu lượng truy cập đến containers HAProxy để làm cho cả hai trang web đều có thể truy cập được từ Internet.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Thêm user của bạn vào group lxd

Đăng nhập vào server bằng account user không phải root. Ta sẽ sử dụng account không phải user này để thực hiện tất cả các việc quản lý containers . Để điều này hoạt động, trước tiên bạn phải thêm user này vào group lxd . Thực hiện việc này bằng lệnh sau:

  • sudo usermod --append --groups lxd sammy

Đăng xuất khỏi server và đăng nhập lại để phiên SSH mới của bạn sẽ được cập nhật với quyền thành viên group mới. Sau khi đăng nhập, bạn có thể bắt đầu cấu hình LXD.

Bước 2 - Cấu hình LXD

LXD cần được cấu hình đúng cách trước khi bạn có thể sử dụng nó. Quyết cấu hình quan trọng nhất là loại backend lưu trữ để lưu trữ các containers . Phần backend lưu trữ được đề xuất cho LXD là hệ thống file ZFS, được lưu trữ trong một file được phân bổ trước hoặc bằng cách sử dụng Bộ nhớ khối . Để sử dụng hỗ trợ ZFS trong LXD, hãy cài đặt gói zfsutils-linux :

  • sudo apt-get update
  • sudo apt-get install zfsutils-linux

Với cài đặt đó, bạn đã sẵn sàng khởi tạo LXD. Trong quá trình khởi tạo, bạn sẽ được yêu cầu chỉ định chi tiết cho phần backend lưu trữ ZFS. Có hai phần tiếp theo, tùy thuộc vào việc bạn muốn sử dụng file được phân bổ trước hay bộ nhớ khối. Làm theo bước thích hợp cho trường hợp của bạn. Khi bạn đã chỉ định cơ chế lưu trữ, bạn sẽ cấu hình các tùy chọn mạng cho containers của bạn .

Tùy chọn 1 - Sử dụng file được phân bổ trước

Làm theo các bước sau để cấu hình LXD để sử dụng file được phân bổ trước để lưu trữ các containers . Đầu tiên, hãy thực hiện lệnh sau để bắt đầu quá trình khởi tạo LXD:

  • sudo lxd init

Bạn sẽ được yêu cầu cung cấp một số phần thông tin, như trong kết quả sau. Ta sẽ chọn tất cả các giá trị mặc định, bao gồm cả kích thước được đề xuất cho file được phân bổ trước, được gọi là thiết bị lặp :

Output
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs Create a new ZFS pool (yes/no) [default=yes]? yes Name of the new ZFS pool [default=lxd]: lxd Would you like to use an existing block device (yes/no) [default=no]? no Size in GB of the new loop device (1GB minimum) [default=15]: 15 Would you like LXD to be available over the network (yes/no) [default=no]? no Do you want to configure the LXD bridge (yes/no) [default=yes]? yes Warning: Stopping lxd.service, but it can still be activated by: lxd.socket LXD has been successfully configured.

Kích thước đề xuất được tính toán tự động từ không gian đĩa có sẵn của server của bạn.

Sau khi thiết bị được cấu hình , bạn sẽ cấu hình cài đặt mạng mà ta sẽ khám phá sau phần tùy chọn tiếp theo.

Tùy chọn 2 - Sử dụng Bộ nhớ khối

Nếu bạn định sử dụng Block Storage, bạn cần tìm thiết bị trỏ đến dung lượng lưu trữ khối mà bạn đã tạo để chỉ định nó trong cấu hình của LXD. Đi tới tab Volumes trong DigitalOcean kiểm soát ô l, xác định vị trí dung lượng của bạn, bấm vào More pop-up, và sau đó bấm vào hướng dẫn Config.

Định vị thiết bị bằng cách xem lệnh để định dạng âm lượng. Cụ thể, hãy tìm đường dẫn được chỉ định trong sudo mkfs.ext4 -F . Hình sau đây cho thấy một ví dụ về dung lượng . Bạn chỉ cần phần được gạch chân:

Hướng dẫn cấu hình hiển thị thiết bị cho bộ nhớ khối đã tạo.

Trong trường hợp này, tên /dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01/dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01 , mặc dù /dev/disk/by-id/scsi-0D0_Volume_volume-fra1-01 của bạn có thể khác.

Khi bạn xác định được dung lượng , hãy quay lại terminal của bạn và đưa ra lệnh sau để bắt đầu quá trình khởi tạo LXD.

  • sudo lxd init

Bạn sẽ thấy với một loạt câu hỏi. Trả lời các câu hỏi như trong kết quả sau:

Output
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs Create a new ZFS pool (yes/no) [default=yes]? yes Name of the new ZFS pool [default=lxd]: lxd

Khi bạn được yêu cầu về việc sử dụng thiết bị chặn hiện có, hãy chọn yes và cung cấp đường dẫn đến thiết bị của bạn:

Output of the "lxd init" command
Would you like to use an existing block device (yes/no) [default=no]? yes Path to the existing block device: /dev/disk/by-id/scsi-0DO_Volume_volume-fra1-01

Sau đó, sử dụng giá trị mặc định cho các câu hỏi còn lại:

Output of the "lxd init" command
Would you like LXD to be available over the network (yes/no) [default=no]? no Do you want to configure the LXD bridge (yes/no) [default=yes]? yes Warning: Stopping lxd.service, but it can still be activated by: lxd.socket LXD has been successfully configured.

Khi hoàn tất , bạn sẽ cấu hình mạng.

Cấu hình mạng

Quá trình khởi tạo sẽ hiển thị cho ta một loạt các màn hình như hình sau cho phép ta cấu hình cầu nối mạng cho các containers để chúng có thể lấy địa chỉ IP riêng, giao tiếp với nhau và có quyền truy cập Internet.

Cấu hình mạng LXD

Sử dụng giá trị mặc định cho mỗi tùy chọn, nhưng khi được hỏi về mạng IPv6, hãy chọn Không , vì ta sẽ không sử dụng nó trong hướng dẫn này.

Khi bạn đã hoàn thành cấu hình mạng, bạn đã sẵn sàng tạo các containers của bạn .

Bước 3 - Tạo containers

Ta đã cấu hình thành công LXD. Ta đã chỉ định vị trí của phần backend lưu trữ và đã cấu hình mạng mặc định cho mọi containers mới được tạo. Ta đã sẵn sàng để tạo và quản lý một số containers , điều này ta sẽ thực hiện với lệnh lxc .

Hãy thử lệnh đầu tiên của ta , lệnh này liệt kê các containers đã cài đặt sẵn:

  • lxc list

Bạn sẽ thấy kết quả sau:

Output of the "lxd list" command
Generating a client certificate. This may take a minute... If this is your first time using LXD, you should also run: sudo lxd init To start your first container, try: lxc launch ubuntu:16.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+

Vì đây là lần đầu tiên lệnh lxc giao tiếp với trình siêu giám sát LXD, kết quả cho ta biết rằng lệnh đã tự động tạo certificate ứng dụng client để giao tiếp an toàn với LXD. Sau đó, nó hiển thị một số thông tin về cách chạy containers . Cuối cùng, lệnh hiển thị danh sách các containers trống, dự kiến vì ta chưa tạo bất kỳ containers nào.

Hãy tạo ba containers . Ta sẽ tạo một containers cho mỗi web server và containers thứ ba cho Reverse Proxy . Mục đích của Reverse Proxy là hướng các kết nối đến từ Internet đến đúng web server trong containers .

Ta sẽ sử dụng lệnh lxc launch để tạo và khởi động containers Ubuntu 16.04 ( ubuntu:x ) có tên là web1 . Dấu x trong ubuntu:x là một phím tắt cho chữ cái đầu tiên của Xenial, tên mã của Ubuntu 16.04. ubuntu: là định danh cho repository hình ảnh LXD được cấu hình sẵn.

Lưu ý : Bạn có thể tìm thấy danh sách đầy đủ của tất cả các hình ảnh Ubuntu có sẵn bằng cách chạy lxc image list ubuntu: và các bản phân phối khác bằng cách chạy các lxc image list images:

Thực thi các lệnh sau để tạo containers :

  • lxc launch ubuntu:x web1
  • lxc launch ubuntu:x web2
  • lxc launch ubuntu:x haproxy

Vì đây là lần đầu tiên ta tạo containers , lệnh đầu tiên tải containers images từ Internet và lưu vào bộ nhớ cache local . Hai containers tiếp theo sẽ được tạo nhanh hơn đáng kể.

Tại đây, bạn có thể xem kết quả mẫu từ việc tạo containers web1 .

Output
Creating web1 Retrieving image: 100% Starting web1

Bây giờ ta đã tạo ba container vani rỗng, hãy sử dụng lệnh lxc list để hiển thị thông tin về chúng:

  • lxc list

Đầu ra hiển thị một bảng với tên của mỗi containers , trạng thái hiện tại của nó, địa chỉ IP, loại của nó và liệu có ảnh chụp nhanh được chụp hay không.

Đầu ra
+---------+---------+-----------------------+------+------------+-----------+ |  NAME   |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS | +---------+---------+-----------------------+------+------------+-----------+ | haproxy | RUNNING | 10.10.10.10 (eth0)    |      | PERSISTENT | 0         | +---------+---------+-----------------------+------+------------+-----------+ | web1    | RUNNING | 10.10.10.100 (eth0)   |      | PERSISTENT | 0         | +---------+---------+-----------------------+------+------------+-----------+ | web2    | RUNNING | 10.10.10.200 (eth0)   |      | PERSISTENT | 0         | +---------+---------+-----------------------+------+------------+-----------+ 

Lưu ý tên containers và địa chỉ IPv4 tương ứng của chúng. Bạn cần chúng để cấu hình các dịch vụ của bạn .

Bước 4 - Cấu hình Vùng chứa Nginx

Hãy kết nối với containers web1 và cấu hình web server đầu tiên.

Để kết nối, ta sử dụng lệnh lxc exec , lấy tên của containers và các lệnh để thực thi. Thực thi lệnh sau để kết nối với containers :

  • lxc exec web1 -- sudo --login --user ubuntu

Chuỗi -- biểu thị rằng các tham số lệnh cho lxc sẽ dừng lại ở đó và phần còn lại của dòng sẽ được chuyển dưới dạng lệnh được thực thi bên trong containers . Lệnh này là sudo --login --user ubuntu , cung cấp shell đăng nhập cho account ubuntu được cấu hình sẵn bên trong containers .

Lưu ý: Nếu bạn cần kết nối với các containers dưới dạng root , bạn có thể sử dụng lệnh lxc exec web1 -- /bin/bash để thay thế.

Khi bên trong containers , dấu nhắc shell của ta bây giờ trông giống như sau.

Output
ubuntu@web1:~$

User ubuntu này trong containers có quyền truy cập sudo được cấu hình trước và có thể chạy các lệnh sudo mà không cần cung cấp password . Vỏ này được giới hạn bên trong giới hạn của vật chứa. Bất kỳ thứ gì ta chạy trong shell này sẽ nằm trong containers và không thể thoát đến server lưu trữ.

Hãy cập nhật danh sách gói của version Ubuntu bên trong containers và cài đặt Nginx:

  • sudo apt-get update
  • sudo apt-get install nginx

Hãy chỉnh sửa trang web mặc định cho trang web này và thêm một số văn bản làm rõ rằng trang web này được lưu trữ trong containers web1 . Mở file /var/www/html/index.nginx-debian.html :

  • sudo nano /var/www/html/index.nginx-debian.html

Thực hiện thay đổi sau đối với file :

Tệp đã chỉnh sửa /var/www/html/index.nginx-debian.html
<!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style>     body {         width: 35em;         margin: 0 auto;         font-family: Tahoma, Verdana, Arial, sans-serif;     } </style> </head> <body> <h1>Welcome to nginx on LXD container web1!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> ... 

Ta đã chỉnh sửa file ở hai nơi và đặc biệt thêm văn bản on LXD container web1 . Lưu file và thoát khỏi editor .

Bây giờ đăng xuất khỏi containers và quay trở lại server lưu trữ:

  • logout

Lặp lại quy trình này cho containers web2 . Đăng nhập, cài đặt Nginx, sau đó chỉnh sửa file /var/www/html/index.nginx-debian.html đề cập đến web2 . Sau đó thoát khỏi containers web2 .

Hãy sử dụng curl để kiểm tra xem các web server trong containers đang hoạt động. Ta cần địa chỉ IP của các containers web đã được hiển thị trước đó.

  • curl http://10.10.10.100/

Đầu ra phải là:

Output of "curl http://10.10.10.100/" command
<!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx on LXD container web1!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> ...

Kiểm tra containers thứ hai cũng bằng cách sử dụng lệnh curl và địa chỉ IP của nó để xác minh nó cũng được cài đặt chính xác. Với cả hai containers được cấu hình , ta có thể chuyển sang cài đặt HAProxy.

Bước 5 - Cấu hình containers HAProxy

Ta sẽ cài đặt HAProxy làm proxy trước các containers này. Nếu bạn cần thêm thông tin cơ bản về cách thức hoạt động của tính năng này, hãy xem lại hướng dẫn Giới thiệu về HAProxy và các khái niệm cân bằng tải . Ta sẽ hướng lưu lượng truy cập đến từng containers dựa trên domain mà ta sử dụng. Ta sẽ sử dụng domain example.com trong ví dụ cấu hình sau đây, là miền dành riêng đặc biệt cho tài liệu như hướng dẫn này. Ta sẽ cung cấp trang web đầu tiên tại tên server example.comwww.example.com . Trang web thứ hai sẽ có tại www2.example.com . Thay thế các domain của bạn thay cho các domain này.

Đăng nhập vào containers haproxy :

  • lxc exec haproxy -- sudo --login --user ubuntu

Cập nhật danh sách các gói cài đặt và cài đặt HAProxy:

  • sudo apt-get update
  • sudo apt-get install haproxy

Sau khi cài đặt hoàn tất, ta có thể cấu hình HAProxy. Tệp cấu hình cho HAProxy có tại /etc/haproxy/haproxy.cfg . Mở file bằng editor yêu thích của bạn.

  • sudo nano /etc/haproxy/haproxy.cfg

Đầu tiên, ta sẽ thực hiện một số sửa đổi đối với phần defaults . Ta sẽ thêm tùy chọn forwardfor để ta giữ lại IP nguồn thực của client web và ta sẽ thêm tùy chọn http-server-close , cho phép sử dụng lại phiên và giảm độ trễ.

/etc/haproxy/haproxy.conf
global ... defaults     log global     mode    http     option  httplog     option  dontlognull     option   forwardfor     option   http-server-close     timeout connect 5000     timeout client  50000     timeout server  50000 ... 

Tiếp theo, ta sẽ cấu hình giao diện user để trỏ đến hai containers backend của ta . Thêm phần frontend mới được gọi là www_frontend trông giống như sau:

/etc/haproxy/haproxy.conf
frontend www_frontend     bind *:80     # Bind to port 80 (www) on the container      # It matches if the HTTP Host: field mentions any of the hostnames (after the '-i').     acl host_web1 hdr(host) -i example.com www.example.com     acl host_web2 hdr(host) -i web2.example.com      # Redirect the connection to the proper server cluster, depending on the match.     use_backend web1_cluster if host_web1     use_backend web2_cluster if host_web2 

Các lệnh acl trùng với tên server của web server và chuyển hướng các yêu cầu đến phần backend tương ứng.

Sau đó, ta định nghĩa hai mới backend phần, một cho mỗi web server , và đặt tên cho chúng web1_clusterweb2_cluster tương ứng. Thêm mã sau vào file để xác định phần backend :

/etc/haproxy/haproxy.conf
backend web1_cluster     balance leastconn     # We set the X-Client-IP HTTP header. This is useful if we want the web server to know the real client IP.     http-request set-header X-Client-IP %[src]     # This backend, named here "web1", directs to container "web1.lxd" (hostname).     server web1 web1.lxd:80 check  backend web2_cluster     balance leastconn     http-request set-header X-Client-IP %[src]     server web2 web2.lxd:80 check 

Tùy chọn balance biểu thị chiến lược cân bằng tải. Trong trường hợp này, ta chọn số lượng kết nối ít nhất. Tùy chọn http-request đặt tiêu đề HTTP với IP client web thực. Nếu ta không đặt tiêu đề này, web server sẽ ghi lại địa chỉ IP HAProxy làm IP nguồn cho tất cả các kết nối, khiến việc phân tích lưu lượng truy cập của bạn bắt nguồn từ đâu trở nên khó khăn hơn. Tùy chọn server chỉ định một tên tùy ý cho server ( web1 ), theo sau là tên server và cổng của server ..

LXD cung cấp một server DNS cho các containers , do đó web1.lxd giải thành IP được liên kết với containers web1 . Các containers khác có tên server riêng của chúng, chẳng hạn như web2.lxdhaproxy.lxd .

Tham số check yêu cầu HAPRoxy thực hiện kiểm tra tình trạng trên web server đảm bảo rằng nó có sẵn.

Để kiểm tra xem cấu hình có hợp lệ không, hãy chạy lệnh sau:

  • /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c

Đầu ra phải là

Đầu ra
Configuration file is valid 

Hãy reload HAProxy để nó đọc cấu hình mới.

  • sudo systemctl reload haproxy

Bây giờ đăng xuất khỏi containers để quay lại server .

  • logout

Ta đã cấu hình HAProxy để hoạt động như một Reverse Proxy để chuyển tiếp bất kỳ kết nối nào mà nó nhận được trên cổng 80 tới web server thích hợp trong hai containers còn lại. Hãy kiểm tra xem haproxy thực sự quản lý để chuyển tiếp các yêu cầu đến đúng containers web hay không. Thực hiện lệnh này:

  • curl --verbose --header 'Host: web2.example.com' http://10.10.10.10

Thao tác này thực hiện một yêu cầu tới HAProxy và đặt tiêu đề host HTTP, HAProxy sẽ sử dụng để chuyển hướng kết nối đến web server thích hợp.

Đầu ra phải là

Output of "curl --verbose --header 'Host: web2.example.com' http://10.10.10.10" command
... > GET / HTTP/1.1 > Host: web2.example.com > User-Agent: curl/7.47.0 > Accept: */* > ... < <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web2!</title> <style> ...

HAProxy đã hiểu chính xác yêu cầu và chuyển tiếp nó đến containers web2 . Ở đó, web server phục vụ trang index mặc định mà ta đã chỉnh sửa trước đó và hiển thị văn bản on LXD container web2 . Bây giờ, hãy định tuyến các yêu cầu bên ngoài tới HAProxy để mọi người có thể truy cập các trang web của ta .

Bước 6 - Chuyển tiếp các kết nối đến đến containers HAProxy

Phần cuối cùng của câu đố là kết nối Reverse Proxy với Internet. Ta cần cài đặt server của bạn để chuyển tiếp bất kỳ kết nối nào mà nó có thể nhận được từ Internet trên cổng 80 tới containers haproxy .

HAProxy được cài đặt trong một containers và theo mặc định, không thể truy cập được từ Internet. Để giải quyết vấn đề này, ta sẽ tạo một luật iptables để chuyển tiếp các kết nối.

Các iptables lệnh yêu cầu hai địa chỉ IP: địa chỉ IP công cộng của server ( your_server_ip ) và địa chỉ IP riêng của haproxy container ( your_haproxy_ip ), mà bạn có thể có được với lxc list lệnh.

Thực thi lệnh này để tạo luật :

  • sudo iptables -t nat -I PREROUTING -i eth0 -p TCP -d your_server_ip/32 --dport 80 -j DNAT --to-destination your_haproxy_ip:80

Đây là cách lệnh được chia nhỏ:

  • -t nat chỉ định rằng ta đang sử dụng bảng nat .
  • -I PREROUTING chỉ định rằng ta đang thêm luật vào chuỗi PREROUTING.
  • -i eth0 chỉ định giao diện eth0 , là giao diện công khai mặc định trên Server.
  • -p TCP cho biết ta đang sử dụng giao thức TCP.
  • -d your_server_ip /32 chỉ định địa chỉ IP đích cho luật .
  • --dport 80 : chỉ định cổng đích.
  • -j DNAT nói rằng ta muốn thực hiện một bước chuyển đến NAT đích (DNAT).
  • --to-destination your_haproxy_ip :80 cho biết rằng ta muốn yêu cầu chuyển đến địa chỉ IP của containers có HAProxy.

Tìm hiểu thêm về IPTables trong Cách hoạt động của firewall Iptables và Thông tin cơ bản về IPtables: Các luật và lệnh firewall phổ biến .

Cuối cùng, để lưu lệnh iptables này để nó được áp dụng lại sau khi khởi động lại, ta cài đặt gói iptables-persistent :

  • sudo apt-get install iptables-persistent

Khi cài đặt gói, bạn sẽ được yêu cầu lưu các luật iptables hiện tại. Chấp nhận và lưu tất cả các luật iptables hiện tại.

Nếu bạn đã cài đặt hai FQDN, thì bạn có thể kết nối với từng trang web bằng trình duyệt web của bạn . Hãy thử nó ra.

Để kiểm tra xem hai server Web có có thể truy cập được từ Internet hay không, hãy truy cập từng server từ máy tính local của bạn bằng lệnh curl như sau:

  • curl --verbose --header 'Host: example.com' 'http://your_server_ip'
  • curl --verbose --header 'Host: web2.example.com' 'http://your_server_ip'

Các lệnh này tạo kết nối HTTP đến địa chỉ IP công cộng của server và thêm trường tiêu đề HTTP với tùy chọn --header mà HAProxy sẽ sử dụng để xử lý yêu cầu, giống như bạn đã làm trong Bước 5.

Đây là kết quả của lệnh curl đầu tiên:

Output
* Trying your_server_ip... * Connected to your_server_ip (your_server_ip) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 (Ubuntu) ... <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web1!</title> <style> body { ...

Đây là kết quả của lệnh curl thứ hai:

Output
* Trying your_server_ip... * Connected to your_server_ip (your_server_ip) port 80 (#0) > GET / HTTP/1.1 > Host: web2.example.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.10.0 (Ubuntu) ... <!DOCTYPE html> <html> <head> <title>Welcome to nginx on LXD container web2!</title> <style> body { ...

Trong cả hai trường hợp, trang web chính xác được hiển thị.

Kết luận

Bạn đã cài đặt hai trang web, mỗi trang trong containers riêng, với lưu lượng truy cập trực tiếp HAProxy. Bạn có thể sao chép quá trình này để cấu hình nhiều trang web khác, mỗi trang web được giới hạn trong containers riêng.

Bạn cũng có thể thêm MySQL vào một containers mới và sau đó cài đặt CMS như WordPress để chạy từng trang web. Bạn cũng có thể sử dụng quy trình này để hỗ trợ các version phần mềm cũ hơn. Ví dụ: nếu cài đặt CMS yêu cầu version phần mềm cũ hơn như PHP5, thì bạn có thể cài đặt Ubuntu 14.04 trong containers ( lxc launch ubuntu:t ), thay vì cố gắng hạ cấp version trình quản lý gói có sẵn trên Ubuntu 16.04.

Cuối cùng, LXD cung cấp khả năng chụp nhanh trạng thái đầy đủ của các containers , giúp dễ dàng tạo bản backup và cuộn các containers trở lại sau đó. Ngoài ra, nếu ta cài đặt LXD trên hai server khác nhau, thì có thể kết nối chúng và di chuyển containers giữa các server qua Internet.


Tags:

Các tin liên quan

Cách bảo mật ứng dụng web nông dân của bạn bằng Let's Encrypt trên Ubuntu 16.04
2017-03-29
Xây dựng các thành phần web gốc với Vue.js
2017-03-16
Cách sử dụng OpenResty Web Framework cho Nginx trên Ubuntu 16.04
2017-02-28
Roundup: Thư viện thành phần ứng dụng web trên máy tính để bàn Vue.js - Cập nhật Q4 2017
2017-02-23
Cách cài đặt Django Web Framework trên Debian 8
2016-12-21
Cách triển khai ứng dụng web Falcon với Gunicorn và Nginx trên Ubuntu 16.04
2016-11-16
Giới thiệu về Ứng dụng web tiến bộ (PWA): Service Worker & Manifest
2016-11-10
Cách cài đặt Django Web Framework trên Ubuntu 16.04
2016-05-16
Cách triển khai ứng dụng web Clojure trên FreeBSD 10.2
2015-12-22
Cách triển khai ứng dụng web Clojure trên Ubuntu 14.04
2015-11-20