Cách cài đặt và cấu hình Caddy Web Server với PHP trên Fedora 34 / CentOS 8

theanh

Administrator
Nhân viên
Caddy là một máy chủ web nguồn mở được viết bằng ngôn ngữ Go. Nó cung cấp hỗ trợ HTTP/3, TLS v1.3, cấu hình SSL tự động với Let's Encrypt, proxy ngược và hỗ trợ nhiều plugin để mở rộng chức năng của nó. Nó có lợi thế là tất cả cấu hình của nó được phục vụ từ một tệp duy nhất bất kể bạn cần lưu trữ bao nhiêu trang web.

Hướng dẫn này sẽ đề cập đến việc cài đặt và cấu hình Caddy và PHP trên các máy chủ chạy Fedora 34 và CentOS 8. Chúng tôi sẽ hướng dẫn cách lưu trữ một hoặc nhiều trang web và cách sử dụng proxy ngược cùng với một số tính năng bảo mật khác.

Điều kiện tiên quyết​


  • Máy chủ chạy Fedora 34 hoặc CentOS 8

  • Người dùng không phải root có quyền sudo

  • Tên miền trỏ đến địa chỉ IP của máy chủ

  • SELinux đã bị vô hiệu hóa.
Mã:
$ sudo setenforce 0
[*]
Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo dnf update

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình Tường lửa để mở các cổng HTTP và HTTPS. Fedora và CentOS đi kèm với tường lửa Firewalld được cài đặt sẵn.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo firewall-cmd --state
Bạn sẽ nhận được kết quả sau.
Mã:
đang chạy
Kiểm tra các dịch vụ/cổng hiện được phép.
Mã:
$ sudo firewall-cmd --permanent --list-services
Kết quả sau sẽ hiển thị.
Mã:
dhcpv6-client mdns ssh
Cho phép các cổng HTTP và HTTPS.
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Bạn sẽ thấy kết quả tương tự.
Mã:
dhcpv6-client http https mdns ssh
Tải lại Tường lửa.
Mã:
$ sudo systemctl reload firewalld

Bước 2 - Cài đặt Caddy​

Bước đầu tiên là cài đặt máy chủ. Các bước cài đặt vẫn giống nhau đối với cả Fedora 34 và CentOS 8.
Mã:
$ sudo dnf install 'dnf-command(copr)'$ sudo dnf copr enable @caddy/caddy$ sudo dnf install caddy
Bạn có thể xác minh cài đặt bằng lệnh sau.
Mã:
$ caddy versionv2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=

Bước 3 - Cơ bản về cấu hình Caddy​

Caddy sử dụng JSON làm định dạng chính để lưu trữ hoặc ghi cấu hình. Đây là cách linh hoạt nhất để ghi cấu hình và hỗ trợ tất cả các tính năng của Caddy. Nhưng nếu bạn không biết cách viết các tệp JSON, Caddy cung cấp một cách dễ dàng hơn dưới dạng Caddyfile.

Gói Fedora / CentOS bao gồm một Caddyfile tại /etc/caddy/Caddyfile. Nó sẽ trông giống như sau (bỏ qua các bình luận)
Mã:
:80 { root * /usr/share/caddy file_server}
Bật và khởi động daemon caddy.
Mã:
$ sudo systemctl enable --now caddy
Bạn có thể mở URL http://youripaddress để kiểm tra.Bạn sẽ thấy trang chào mừng sau.



Caddy cung cấp nhiều tính năng và cấu hình, vì vậy chúng tôi sẽ chỉ sử dụng những tính năng và cấu hình quan trọng để phục vụ cho trang web của mình. Cấu hình mặc định phục vụ qua HTTP, được chỉ định là :80. Chỉ thị root yêu cầu Caddy tìm kiếm các tệp sẽ được phục vụ trong thư mục /usr/share/caddy.

Chỉ thị file_server yêu cầu Caddy hoạt động như một máy chủ tệp, nghĩa là nó sẽ chỉ phục vụ các tệp tĩnh qua địa chỉ mặc định.

Cấu hình Caddy cho một trang web HTML cơ bản​

Chúng ta hãy tạo một tệp cấu hình caddy cơ bản để phục vụ một trang web tĩnh.

Tạo một thư mục để lưu trữ trang web của bạn và lưu trữ các tệp nhật ký của bạn.
Mã:
$ sudo mkdir -p /var/www/example.com/html$ sudo mkdir /var/log/caddy
Đặt quyền sở hữu thư mục cho Caddy.
Mã:
$ sudo chown caddy:caddy /var/www/example.com/html -R$ sudo chown caddy:caddy /var/log/caddy
Tạo một tệp HTML để kiểm tra và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /var/www/example.com/html/index.html
Thêm mã sau.
Mã:
Xin chào từ Caddy![HEADING=1]Xin chào, từ Caddy![/HEADING]
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Mở Caddyfile để chỉnh sửa.
Mã:
$ sudo nano /etc/caddy/Caddyfile
Thay thế mã hiện có bằng mã sau.
Mã:
example.com { root * /var/www/example.com/html file_server mã hóa gzip log { tệp đầu ra /var/log/caddy/example.access.log } @static { đường dẫn tệp *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp } header @static Cache-Control max-age=5184000 tls [emailprotected]}
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Chúng ta hãy xem qua tất cả các lệnh trong tệp. Lệnh encode gzip yêu cầu Caddy nén các tệp bằng cách sử dụng nén Gzip.

Lệnh log xuất nhật ký truy cập cho trang web vào tệp /var/log/caddy/example.access.log. Theo mặc định, Caddy sẽ xoay vòng các tệp nhật ký khi chúng đạt 100 MB. Các tệp đã xoay vòng sẽ bị xóa sau 90 ngày hoặc khi có hơn 10 nhật ký đã xoay vòng. Bạn có thể thay đổi các tham số mặc định theo cách sau.
Mã:
log { tệp đầu ra /var/log/caddy/example.access.log { roll_size 10MB roll_keep 5 roll_keep_for 240h }}
Trong mã trên, các tệp nhật ký được xoay vòng bị giới hạn ở 10 MB và bị xóa sau 10 ngày (240 giờ) hoặc khi có hơn 5 nhật ký được xoay vòng.

Caddy sẽ tự động tạo và cài đặt chứng chỉ SSL mà không cần bất kỳ sự can thiệp nào. Chỉ thị tls cho phép chúng ta cung cấp các tùy chọn bổ sung để định cấu hình HTTPS như địa chỉ email được sử dụng để lấy báo cáo Let's Encrypt.

Chỉ thị header bật Cache-control trên tất cả các tệp tĩnh (tệp hình ảnh/javascript/CSS). Bạn có thể thêm nhiều phần mở rộng tệp hơn hoặc sao chép mã để đặt thời lượng khác nhau cho các định dạng tệp khác nhau. Bạn sẽ phải thay đổi giá trị static thành một giá trị khác vì đó là tham chiếu được đặt tên.

Sau khi hoàn tất, bạn có thể xác thực cấu hình của mình bằng lệnh sau.
Mã:
$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile
Chúng ta phải sử dụng tùy chọn --adapter caddyfile vì theo mặc định, lệnh này chỉ xác thực cấu hình JSON.

Nếu bạn nhận được cảnh báo sau, bạn có thể dễ dàng khắc phục chỉ bằng một lệnh duy nhất.
Mã:
WARN input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}
Chạy lệnh sau để khắc phục lỗi.
Mã:
$ caddy fmt --overwrite /etc/caddy/Caddyfile
Lệnh trên định dạng và ghi đè lên Caddyfile.

Khởi động lại Caddy để kích hoạt cấu hình. Bạn sẽ cần khởi động lại máy chủ mỗi khi thực hiện thay đổi trong cấu hình.
Mã:
$ sudo systemctl restart caddy
Mở https://example.com?utm_source=diendancongnghe.comtrong trình duyệt của bạn và bạn sẽ thấy trang sau, điều đó có nghĩa là cấu hình đang hoạt động.


Cấu hình nhiều site trong Caddy​

Bạn có thể cấu hình nhiều site trong một tệp caddy duy nhất. Để thực hiện điều đó, hãy tạo các khối riêng biệt cho từng trang web theo cách sau.
Mã:
example1.com { root * /var/www/example1.com/html ...}example2.com { root * /var/www/example2.com/html ...}
Phương pháp này phù hợp với một vài trang web, nhưng một trang web có thể trở nên khá lớn và khó bảo trì nếu bạn đang lưu trữ nhiều trang web.

Tạo thư mục `/etc/caddy/caddyconf.
Mã:
$ sudo mkdir /etc/caddy/caddyconf
Bây giờ bạn có thể nhập các tệp cấu hình từ thư mục trong /etc/caddty/caddyfile của bạn ở đầu tệp.
Mã:
import caddyconf/*.conf
Bước cuối cùng là tạo các tệp cấu hình riêng lẻ cho từng trang web.

Cấu hình các trang web PHP​

Cho đến nay, chúng ta chỉ nói về việc phục vụ các site tĩnh bằng Caddy. Bạn cũng có thể sử dụng Caddy để phục vụ các site PHP động một cách dễ dàng. Để bật hỗ trợ PHP, hãy thêm mã sau vào khối site của bạn.
Mã:
example1.com { root * /var/www/example1.com/html ... php_fastcgi unix//run/php-fpm/www.sock}
Bạn cũng sẽ cần phải cài đặt PHP.
Mã:
$ sudo dnf install php-fpm php-cli php-gd
Bạn có thể cài đặt bất kỳ module PHP bổ sung nào mà bạn yêu cầu. Bạn cũng sẽ cần phải cấu hình tệp /etc/php-fpm.d/www.conf. Mở tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/php-fpm.d/www.conf
Chúng ta cần đặt người dùng/nhóm Unix của các quy trình PHP thành caddy. Tìm các dòng user=apachegroup=apache trong tệp và đổi chúng thành nginx.
Mã:
...; Người dùng/nhóm quy trình Unix; Lưu ý: Người dùng là bắt buộc. Nếu nhóm không được đặt, nhóm người dùng mặc định; sẽ được sử dụng.; RPM: người dùng apache được chọn để cung cấp quyền truy cập vào cùng thư mục với httpduser = caddy; RPM: Giữ một nhóm được phép ghi vào thư mục nhật ký.group = caddy...
Tìm dòng listen.acl_users = apache,nginx và thay đổi giá trị của nó thành giá trị sau.
Mã:
...listen.acl_users = apache,nginx,caddy...
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bắt đầu quy trình PHP-fpm.
Mã:
$ sudo systemctl start php-fpm
Để kiểm tra thiết lập PHP của bạn, hãy tạo tệp test.php trong thư mục html.
Mã:
$ sudo nano /var/www/example.com/html/test.php
Thêm nội dung sau vào đó và lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mã:
 
Back
Bên trên