Cài đặt Apache Web Server trên CentOS 8 - Install Apache Web Server on CentOS 8

Máy chủ HTTP Apache là máy chủ web được sử dụng rộng rãi nhất trên thế giới. Nó cung cấp nhiều tính năng mạnh mẽ bao gồm các mô-đun có thể tải động, hỗ trợ phương tiện mạnh mẽ và tích hợp rộng rãi với các phần mềm phổ biến khác. Trong hướng dẫn này, bạn sẽ install máy chủ web Apache với máy chủ ảo trên máy chủ CentOS 8 của mình.

Chuẩn bị trước khi cài đặt

Bạn sẽ cần những điều sau đây để hoàn thành hướng dẫn này:

  • Người dùng không phải root có đặc quyền sudo được định cấu hình trên máy chủ của bạn
  • Đảm bảo tường lửa cơ bản được định cấu hình 

Bước 1: Install Apache

Apache có sẵn trong kho lưu trữ phần mềm mặc định của CentOS, điều này có nghĩa bạn có thể cài đặt nó bằng trình quản lý gói dnf.

Với tư cách là người dùng sudo không phải root đã được cấu hình trong các yêu cầu tiên quyết, hãy cài đặt gói Apache:

sudo dnf install httpd

Sau khi xác nhận cài đặt, dnf sẽ cài đặt Apache và tất cả các phụ thuộc cần thiết.

Bằng cách hoàn thành thiết lập máy chủ CentOS 8 ban đầu được đề cập trong phần yêu cầu đầu tiên, bạn đã cài đặt firewalld trên máy chủ của mình để phục vụ yêu cầu qua HTTP.

Nếu bạn cũng có kế hoạch cấu hình Apache để phục vụ nội dung qua HTTPS, bạn cũng muốn mở cổng 443 bằng cách bật dịch vụ https:

sudo firewall-cmd --permanent --add-service=https

Tiếp theo, tải lại tường lửa để các quy tắc mới này có hiệu lực:

sudo firewall-cmd --reload

Sau khi tường lửa tải lại, bạn đã sẵn sàng khởi động dịch vụ và kiểm tra máy chủ web.

Bước 2: Kiểm tra Web Server

Apache không tự động khởi động trên CentOS sau khi quá trình cài đặt hoàn tất, vì vậy bạn sẽ cần khởi động quy trình Apache theo cách thủ công:

sudo systemctl start httpd

Xác minh rằng dịch vụ đang chạy bằng lệnh sau:

sudo systemctl status httpd

Bạn sẽ nhận được trạng thái hoạt động khi dịch vụ đang chạy:

Output
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa> Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago Docs: man:httpd.service(8) Main PID: 14219 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 5059) Memory: 24.9M CGroup: /system.slice/httpd.service ├─14219 /usr/sbin/httpd -DFOREGROUND ├─14220 /usr/sbin/httpd -DFOREGROUND ├─14221 /usr/sbin/httpd -DFOREGROUND ├─14222 /usr/sbin/httpd -DFOREGROUND └─14223 /usr/sbin/httpd -DFOREGROUND ...

Như đầu ra này cho biết, dịch vụ đã bắt đầu thành công. Tuy nhiên, cách tốt nhất để kiểm tra điều này là yêu cầu một trang từ Apache.

Bạn có thể truy cập trang đích Apache mặc định để xác nhận rằng phần mềm đang chạy bình thường thông qua địa chỉ IP của bạn. Nếu bạn không biết địa chỉ IP máy chủ của mình, bạn có thể lấy địa chỉ đó bằng một số cách khác nhau từ dòng lệnh.

Nhập "q" để trở lại dấu nhắc lệnh và sau đó nhập:

hostname -I

Lệnh này sẽ hiển thị tất cả các địa chỉ mạng của máy chủ, vì vậy bạn sẽ nhận được một vài địa chỉ IP được phân tách bằng khoảng trắng. Bạn có thể thử từng địa chỉ này trong trình duyệt web của bạn để xác định xem chúng có hoạt động không.

Hoặc bạn có thể sử dụng lệnh curl để yêu cầu địa chỉ IP của máy chủ từ icanhazip.com, nơi sẽ cung cấp cho bạn địa chỉ IPv4 công khai của bạn như được đọc từ một vị trí khác trên internet:

curl -4 icanhazip.com

Khi bạn có địa chỉ IP của máy chủ, hãy nhập địa chỉ đó vào thanh địa chỉ của trình duyệt:

http://your_server_ip

Bạn sẽ thấy trang web CentOS 8 Apache mặc định:

trang mặc định Apache CentOS 8

Trang này cho biết Apache đang hoạt động chính xác. Nó cũng bao gồm một số thông tin cơ bản về các tệp Apache và vị trí thư mục quan trọng.

Bước 3: Quản lý quá trình Apache 

Bây giờ dịch vụ đã được cài đặt và chạy, bây giờ bạn có thể sử dụng các lệnh systemctl khác nhau để quản lý dịch vụ.

Để dừng máy chủ web của bạn, gõ:

sudo systemctl stop httpd

Để khởi động máy chủ web khi nó bị dừng, hãy gõ:

sudo systemctl start httpd

Để dừng và sau đó bắt đầu lại dịch vụ, hãy gõ:

sudo systemctl restart httpd

Nếu bạn chỉ thực hiện thay đổi cấu hình, Apache thường có thể tải lại mà không làm mất kết nối. Để làm điều này, sử dụng lệnh này:

sudo systemctl reload httpd

Theo mặc định, Apache được cấu hình để tự động khởi động khi máy chủ khởi động. Nếu đây không phải là điều bạn muốn, hãy tắt hành vi này bằng cách gõ:

sudo systemctl disable httpd

Để kích hoạt lại dịch vụ để khởi động khi khởi động, hãy gõ:

sudo systemctl enable httpd

Apache bây giờ sẽ tự động khởi động khi máy chủ khởi động lại.

Cấu hình mặc định cho Apache sẽ cho phép máy chủ của bạn lưu trữ một trang web. Nếu bạn định lưu trữ nhiều tên miền trên máy chủ của mình, bạn sẽ cần định cấu hình máy chủ ảo trên máy chủ web Apache của mình.

Bước 4: Thiết lập máy chủ ảo - Virtual Hosts (Tùy chọn)

Khi sử dụng máy chủ web Apache, bạn có thể sử dụng máy chủ ảo (nếu bạn quen với Nginx, chúng tương tự với khối máy chủ) để đóng gói chi tiết cấu hình và chứa nhiều tên miền từ một máy chủ duy nhất. Trong bước này, bạn sẽ thiết lập một tên miền được gọi là example.com, nhưng bạn nên thay thế nó bằng tên miền riêng của bạn. Nếu bạn đang thiết lập tên miền với DigitalOcean, vui lòng tham khảo Tài liệu Networking của chúng tôi.

Apache trên CentOS 8 có một máy chủ ảo được kích hoạt mặc định và được cấu hình để phục vụ tài liệu từ thư mục /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web duy nhất, nhưng nếu bạn đang lưu trữ nhiều trang web, nó có thể trở nên khó kiểm soát. Thay vì sửa đổi /var/www/html, bạn sẽ tạo một cấu trúc thư mục trong /var/www cho trang web example.com, để /var/www/html vẫn ở đó như thư mục mặc định để phục vụ nếu yêu cầu của khách hàng không khớp với bất kỳ trang web nào khác.

Tạo thư mục html cho example.com như sau, sử dụng cờ -p để tạo bất kỳ thư mục cha cần thiết:

sudo mkdir -p /var/www/example.com/html

Tạo thêm thư mục để lưu file log cho site:

sudo mkdir -p /var/www/example.com/log

Tiếp theo, gán quyền sở hữu thư mục html với biến môi trường $USER:

sudo chown -R $USER:$USER /var/www/example.com/html

Đảm bảo rằng web root của bạn có bộ quyền mặc định:

sudo chmod -R 755 /var/www

Tiếp theo, tạo một trang index.html mẫu bằng vi hoặc trình soạn thảo yêu thích của bạn:

sudo vi /var/www/example.com/html/index.html

Nhấn i để chuyển sang chế độ INSERT và thêm mẫu HTML sau vào tệp:

/var/www/example.com/html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

Lưu và đóng tệp bằng cách nhấn ESC, gõ :wq và nhấn ENTER.

Sau khi bạn đã có thư mục trang web và tệp index mẫu ở đúng vị trí, bạn gần như đã sẵn sàng để tạo các tệp máy chủ ảo. Các tệp máy chủ ảo chỉ định cấu hình của các trang web riêng lẻ của bạn và cho biết máy chủ web Apache phải phản hồi ra sao đối với các yêu cầu tên miền khác nhau.

Trước khi tạo các máy chủ ảo của bạn, bạn cần tạo một thư mục sites-available để lưu trữ chúng. Bạn cũng sẽ tạo thư mục sites-enabled để thông báo cho Apache rằng một máy chủ ảo đã sẵn sàng phục vụ cho khách truy cập. Thư mục sites-enabled sẽ chứa các liên kết tượng trưng đến các máy chủ ảo mà chúng ta muốn xuất bản. Hãy tạo cả hai thư mục này bằng lệnh sau:

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Tiếp theo, bạn sẽ yêu cầu Apache tìm kiếm các máy chủ ảo trong thư mục hỗ trợ trang web. Để thực hiện điều này, hãy chỉnh sửa tệp cấu hình chính của Apache bằng vi hoặc trình soạn thảo văn bản yêu thích của bạn và thêm một dòng khai báo thư mục tùy chọn cho các tệp cấu hình bổ sung:

sudo vi /etc/httpd/conf/httpd.conf

Nhấn chữ G để điều hướng về cuối tập tin. Sau đó nhấn i để chuyển sang chế độ INSERT và thêm dòng sau vào cuối tệp:

/etc/httpd/conf/httpd.conf
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

Lưu và đóng tệp khi bạn đã hoàn thành việc thêm dòng đó. Bây giờ bạn đã có thư mục máy chủ ảo ở đúng vị trí, bạn sẽ tạo tệp máy chủ ảo của mình.

Bắt đầu bằng cách tạo một tệp mới trong thư mục sites-available:

sudo vi /etc/httpd/sites-available/example.com.conf

Thêm vào khối cấu hình sau và thay đổi tên miền example.com thành tên miền của bạn:

/etc/httpd/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/example.com/html
    ErrorLog /var/www/example.com/log/error.log
    CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>

Tệp cấu hình này sẽ cho Apache biết nơi tìm thư mục gốc chứa các tài liệu web có thể truy cập công khai. Nó cũng cho biết cho Apache nơi lưu trữ các nhật ký lỗi và yêu cầu cho trang web cụ thể này.

Lưu và đóng tập tin khi bạn hoàn tất.

Bây giờ bạn đã tạo các tệp máy chủ ảo, bạn sẽ bật chúng để Apache biết phục vụ chúng cho khách truy cập. Để làm điều này, hãy tạo một liên kết tượng trưng cho mỗi máy chủ ảo trong thư mục sites-enabled:

sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

Bây giờ máy chủ ảo của bạn đã được cấu hình và sẵn sàng phục vụ nội dung. Trước khi khởi động lại dịch vụ Apache, hãy đảm bảo rằng SELinux đã có các chính sách đúng cho máy chủ ảo của bạn.

Bước 5: Thiết lập SELinux Permissions cho máy chủ ảo (Tùy chọn)

SELinux là mô-đun bảo mật nhân Linux mang lại khả năng bảo mật nâng cao cho các hệ thống Linux. CentOS 8 được trang bị cấu hình SELinux để hoạt động với cấu hình Apache mặc định. Vì bạn đã thay đổi cấu hình mặc định bằng cách thiết lập thư mục nhật ký tùy chỉnh trong tệp cấu hình máy chủ ảo, nên bạn sẽ gặp lỗi nếu cố gắng khởi động dịch vụ Apache. Để giải quyết vấn đề này, bạn cần cập nhật các chính sách SELinux để cho phép Apache ghi vào các tệp cần thiết.

Có nhiều cách khác nhau để đặt chính sách dựa trên nhu cầu của môi trường vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của mình. Bước này sẽ bao gồm hai phương pháp điều chỉnh chính sách Apache: phổ biến và trên một thư mục cụ thể. Việc điều chỉnh các chính sách trên thư mục sẽ an toàn hơn và do đó đây là phương pháp được khuyến nghị.

Điều chỉnh chính sách Apache trên toàn cầu

Việc đặt chính sách Apache chung sẽ yêu cầu SELinux xử lý tất cả các quy trình Apache một cách giống hệt nhau bằng cách sử dụng Boolean httpd_unified. Mặc dù cách tiếp cận này thuận tiện hơn nhưng nó sẽ không cung cấp cho bạn mức độ kiểm soát tương tự như cách tiếp cận tập trung vào chính sách tệp hoặc thư mục.

Chạy lệnh sau để đặt chính sách Apache phổ quát:

sudo setsebool -P httpd_unified 1

Lệnh setsebool thay đổi giá trị SELinux Boolean. Cờ -P sẽ cập nhật giá trị thời gian khởi động, khiến thay đổi này vẫn tồn tại trong suốt quá trình khởi động lại. httpd_unified là Boolean sẽ yêu cầu SELinux coi tất cả các quy trình Apache là cùng một loại, vì vậy bạn đã kích hoạt nó với giá trị là 1.

Điều chỉnh chính sách Apache trên một thư mục

Việc đặt riêng các quyền SELinux cho thư mục /var/www/example.com/log sẽ giúp bạn có nhiều quyền kiểm soát hơn đối với các chính sách Apache của mình nhưng cũng có thể yêu cầu bảo trì nhiều hơn. Vì tùy chọn này không phải là chính sách cài đặt chung nên bạn sẽ cần đặt loại ngữ cảnh theo cách thủ công cho bất kỳ thư mục nhật ký mới nào được chỉ định trong cấu hình máy chủ ảo của mình.

Trước tiên, hãy kiểm tra loại ngữ cảnh mà SELinux đã cung cấp cho thư mục /var/www/example.com/log:

sudo ls -dlZ /var/www/example.com/log/

Lệnh này liệt kê và in bối cảnh SELinux của thư mục. Bạn sẽ nhận được đầu ra tương tự như sau:

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

Ngữ cảnh hiện tại là httpd_sys_content_t, cho SELinux biết rằng tiến trình Apache chỉ có thể đọc các tệp được tạo trong thư mục này. Trong hướng dẫn này, bạn sẽ thay đổi loại ngữ cảnh của thư mục /var/www/example.com/log thành httpd_log_t. Loại này sẽ cho phép Apache tạo và nối thêm vào các tệp nhật ký ứng dụng web:

sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"

Tiếp theo, sử dụng lệnh recoverycon để áp dụng những thay đổi này và duy trì chúng trong suốt quá trình khởi động lại:

sudo restorecon -R -v /var/www/example.com/log

Cờ -R chạy lệnh này theo cách đệ quy, nghĩa là nó sẽ cập nhật mọi tệp hiện có để sử dụng ngữ cảnh mới. Cờ -v sẽ in những thay đổi ngữ cảnh mà lệnh đã thực hiện. Bạn sẽ nhận được kết quả đầu ra sau xác nhận những thay đổi:

Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0

Bạn có thể liệt kê các bối cảnh một lần nữa để xem những thay đổi:

sudo ls -dlZ /var/www/example.com/log/

Đầu ra phản ánh loại ngữ cảnh được cập nhật:

Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/

Bây giờ thư mục /var/www/example.com/log đang sử dụng loại httpd_log_t, bạn đã sẵn sàng kiểm tra cấu hình máy chủ ảo của mình.

Bước 6: Kiểm tra Virtual Host (Tùy chọn)

Khi bối cảnh SELinux đã được cập nhật bằng một trong hai phương thức, Apache sẽ có thể ghi vào thư mục /var/www/example.com/log. Bây giờ bạn có thể khởi động lại thành công dịch vụ Apache:

sudo systemctl restart httpd

Liệt kê nội dung của thư mục /var/www/example.com/log để xem Apache có tạo tệp nhật ký hay không:

ls -lZ /var/www/example.com/log

Bạn sẽ nhận được xác nhận rằng Apache có thể tạo các tệp error.logrequest.log được chỉ định trong cấu hình máy chủ ảo:

Output
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log -rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log

Bây giờ bạn đã thiết lập máy chủ ảo và cập nhật các quyền SELinux, Apache sẽ phục vụ tên miền của bạn. Bạn có thể kiểm tra điều này bằng cách điều hướng đến http://example.com, nơi bạn sẽ thấy nội dung như thế này:

install apache on centos 8

Điều này xác nhận rằng máy chủ ảo của bạn đã được cấu hình thành công và cung cấp nội dung. Lặp lại Bước 4 và 5 để tạo máy chủ ảo mới có quyền SELinux cho các miền bổ sung.

Phần kết luận install Apache trên CentOS 8

Trong hướng dẫn này, bạn đã install và quản lý máy chủ web Apache trên CentOS 8. Bây giờ bạn đã cài đặt máy chủ web của mình, bạn có nhiều tùy chọn về loại nội dung bạn có thể phân phối và các công nghệ bạn có thể sử dụng để tạo ra trải nghiệm phong phú hơn.

Nếu bạn muốn xây dựng một bộ ứng dụng hoàn chỉnh hơn, bạn có thể xem bài viết này về cách cấu hình LAMP stack trên CentOS 8.