---
title: "Cách cài đặt máy chủ web Apache trên Ubuntu 20.04"
description: "Cách cài đặt máy chủ web Apache trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-cai-dat-may-chu-web-apache-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_r88J83n.jpg
---

# Cách cài đặt máy chủ web Apache trên Ubuntu 20.04

## Giới thiệu

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 phần mềm phổ biến khác.

Trong hướng dẫn này, chúng tôi sẽ giải thích cách cài đặt máy chủ web Apache trên máy chủ Ubuntu 20.04 của bạn.

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

Trước khi bạn bắt đầu hướng dẫn này, bạn nên có một non-root user với các đặc quyền sudo được định cấu hình trên máy chủ của bạn. Ngoài ra, bạn sẽ cần bật tường lửa cơ bản để chặn các cổng không cần thiết. Bạn có thể tìm hiểu cách định cấu hình tài khoản người dùng thông thường và thiết lập tường lửa cho máy chủ của mình bằng cách làm theo hướng dẫn thiết lập máy chủ Ban đầu cho Ubuntu 20.04 của chúng tôi.

Khi bạn có sẵn một tài khoản, hãy đăng nhập với tư cách là non-root user của bạn để bắt đầu.

## Bước 1 — Cài đặt Apache

Apache có sẵn trong kho phần mềm mặc định của Ubuntu, cho phép cài đặt nó bằng các công cụ quản lý gói thông thường.

Hãy bắt đầu bằng cách cập nhật chỉ mục gói cục bộ để phản ánh những thay đổi ngược dòng mới nhất:
```command
sudo apt update
```

Sau đó, cài đặt gói `apache2`:
```command
sudo apt install apache2
```

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

## Bước 2 — Điều chỉnh Tường lửa

Trước khi kiểm tra Apache, cần sửa đổi cài đặt tường lửa để cho phép bên ngoài truy cập vào các cổng web mặc định. Giả sử rằng bạn đã làm theo hướng dẫn trong phần điều kiện tiên quyết, bạn nên cấu hình tường lửa UFW để hạn chế quyền truy cập vào máy chủ của mình.

Trong quá trình cài đặt, Apache tự đăng ký với UFW để cung cấp một vài cấu hình ứng dụng có thể được sử dụng để bật hoặc tắt quyền truy cập vào Apache thông qua tường lửa.

Liệt kê các hồ sơ ứng dụng `ufw` bằng cách gõ:
```command
sudo ufw app list
```

Bạn sẽ nhận được một danh sách các hồ sơ ứng dụng:
```
[secondary_label Output]
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH
```

Như được chỉ ra bởi đầu ra, có ba cấu hình có sẵn cho Apache:

* **Apache**: Hồ sơ này chỉ mở cổng 80 (lưu lượng truy cập web bình thường, không được mã hóa)
* **Apache Full**: Cấu hình này mở cả cổng 80 (lưu lượng truy cập web bình thường, không được mã hóa) và cổng 443 (lưu lượng được mã hóa TLS/SSL)
* **Apache Secure**: Cấu hình này chỉ mở cổng 443 (lưu lượng được mã hóa TLS/SSL)

Bạn nên bật cấu hình hạn chế nhất vẫn cho phép lưu lượng truy cập mà bạn đã định cấu hình. Vì chúng tôi chưa định cấu hình SSL cho máy chủ của mình trong hướng dẫn này, chúng tôi sẽ chỉ cần cho phép lưu lượng truy cập trên cổng 80:
```command
sudo ufw allow 'Apache'
```

Bạn có thể xác minh thay đổi bằng cách nhập:
```command
sudo ufw status
```

Đầu ra sẽ cung cấp danh sách lưu lượng HTTP được phép:
```
[secondary_label Output]
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
<^>Apache                     ALLOW       Anywhere<^>                
OpenSSH (v6)               ALLOW       Anywhere (v6)             
<^>Apache (v6)                ALLOW       Anywhere (v6)<^>
```

Như được chỉ ra bởi đầu ra, cấu hình đã được kích hoạt để cho phép truy cập vào máy chủ web Apache.

## Bước 3 — Kiểm tra Máy chủ Web của bạn

Khi kết thúc quá trình cài đặt, Ubuntu 20.04 khởi động Apache. Máy chủ web đã được thiết lập và đang chạy.

Kiểm tra với hệ thống init `systemd` để đảm bảo dịch vụ đang chạy bằng cách gõ:
```command
sudo systemctl status apache2
```

```
[secondary_label Output]
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-04-23 22:36:30 UTC; 20h ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 29435 (apache2)
      Tasks: 55 (limit: 1137)
     Memory: 8.0M
     CGroup: /system.slice/apache2.service
             ├─29435 /usr/sbin/apache2 -k start
             ├─29437 /usr/sbin/apache2 -k start
             └─29438 /usr/sbin/apache2 -k start
```

Theo xác nhận của đầu ra này, 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 mặc định của Apache để xác nhận rằng phần mềm đang chạy đúng thông qua địa chỉ IP của bạn. Nếu bạn không biết địa chỉ IP của máy chủ, bạn có thể lấy địa chỉ đó bằng một vài cách khác nhau từ dòng lệnh.

Hãy thử gõ cái này tại dấu nhắc lệnh của máy chủ của bạn:
```command
hostname -I
```

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

Một tùy chọn khác là sử dụng công cụ Icanhazip, công cụ này sẽ cung cấp cho bạn địa chỉ IP công khai của bạn khi được đọc từ một vị trí khác trên internet:
```command
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:
```custom_prefix()
http://<^>your_server_ip<^>
```

Bạn sẽ thấy trang web mặc định của Ubuntu 20.04 Apache:

![description image](https://media.cloudfly.vn/posts/small_apache_default.png)

Trang này chỉ ra rằng Apache đang hoạt động bình thường. 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 4 - Quản lý quy trình Apache

Bây giờ bạn đã thiết lập và chạy máy chủ web của mình, hãy xem qua một số lệnh quản lý cơ bản bằng `systemctl`.

Để dừng máy chủ web của bạn, gõ:
```command
sudo systemctl stop apache2
```

Để khởi động máy chủ web khi nó bị dừng, hãy nhập:
```command
sudo systemctl start apache2
```

Để dừng và sau đó bắt đầu lại dịch vụ, hãy nhập:
```command
sudo systemctl restart apache2
```

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:
```command
sudo systemctl reload apache2
```

Theo mặc định, Apache được cấu hình để khởi động tự độ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 nhập:
```command
sudo systemctl disable apache2
```

Để kích hoạt lại dịch vụ để khởi động khi khởi động, hãy nhập:
```command
sudo systemctl enable apache2
```

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

## Bước 5 — Thiết lập máy chủ ảo (Được khuyến nghị)

Khi sử dụng máy chủ web Apache, bạn có thể sử dụng *các máy chủ ảo* (tương tự như các khối máy chủ trong Nginx) để đóng gói các chi tiết cấu hình và lưu trữ nhiều miền từ một máy chủ. Chúng tôi sẽ thiết lập một miền gọi là **your_domain**, nhưng bạn nên **thay thế miền này bằng tên miền của riêng bạn**. 

Apache trên Ubuntu 20.04 có một khối máy chủ được bật theo mặc định, khối này được định 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, nhưng nó có thể trở nên khó sử dụng nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi `/var/www/html`, hãy tạo cấu trúc thư mục bên trong `var/www` cho trang web **your_domain**, để nguyên `/var/www/html` làm thư mục mặc định sẽ được phục vụ nếu yêu cầu của khách hàng không khớp với bất kỳ các trang web khác.

Tạo thư mục cho **your_domain** như sau:
```command
sudo mkdir /var/www/<^>our_domain<^>
```

Tiếp theo, gán quyền sở hữu thư mục với biến môi trường `$USER`:
```command
sudo chown -R $USER:$USER /var/www/<^>your_domain<^>
```

Các quyền của gốc web của bạn phải chính xác nếu bạn chưa sửa đổi giá trị ô của mình, giá trị này đặt quyền cho tệp mặc định. Để đảm bảo rằng các quyền của bạn là chính xác và cho phép chủ sở hữu đọc, ghi và thực thi các tệp trong khi chỉ cấp quyền đọc và thực thi cho các nhóm và những người khác, bạn có thể nhập lệnh sau:
```command
sudo chmod -R 755 /var/www/<^>your_domain<^>
```

Tiếp theo, tạo một trang `index.html` mẫu bằng cách sử dụng `nano` hoặc trình chỉnh sửa yêu thích của bạn:
```command
sudo nano /var/www/<^>your_domain<^>/index.html
```

Bên trong, thêm HTML mẫu sau:
```nginx
[label /var/www/your_domain/index.html]
<html>
    <head>
        <title>Welcome to <^>Your_domain<^>!</title>
    </head>
    <body>
        <h1>Success!  The <^>your_domain<^> virtual host is working!</h1>
    </body>
</html>
```

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

Để Apache phục vụ nội dung này, cần phải tạo một tệp máy chủ ảo với các chỉ thị chính xác. Thay vì sửa đổi trực tiếp tệp cấu hình mặc định có tại `/etc/apache2/sites-available/000-default.conf`, hãy tạo một tệp mới tại `/etc/apache2/sites-available/<^>your_domain<^>.conf`:
```command
sudo nano /etc/apache2/sites-available/<^>your_domain<^>.conf
```

Dán vào khối cấu hình sau, tương tự như mặc định, nhưng được cập nhật cho thư mục và tên miền mới của chúng tôi:
```nginx
[label /etc/apache2/sites-available/your_domain.conf]
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName <^>your_domain<^>
    ServerAlias <^>www.your_domain<^>
    DocumentRoot /var/www/<^>your_domain<^>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
```

Lưu ý rằng chúng tôi đã cập nhật `DocumentRoot` vào thư mục mới của chúng tôi và `ServerAdmin` thành một email mà quản trị viên trang **your_domain** có thể truy cập. Chúng tôi cũng đã thêm hai chỉ thị: `ServerName`, thiết lập miền cơ sở phù hợp với định nghĩa máy chủ ảo này và `ServerAlias`, xác định các tên khác sẽ khớp như thể chúng là tên cơ sở.

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

Hãy kích hoạt tệp bằng công cụ `a2ensite`:
```command
sudo a2ensite <^>your_domain<^>.conf
```

Vô hiệu hóa trang mặc định được xác định trong `000-default.conf`:
```command
sudo a2dissite 000-default.conf
```

Tiếp theo, hãy kiểm tra lỗi cấu hình:
```command
sudo apache2ctl configtest
```

Bạn sẽ nhận được đầu ra sau:
```
[secondary_label Output]
Syntax OK
```

Khởi động lại Apache để thực hiện các thay đổi của bạn:
```command
sudo systemctl restart apache2
```

Bây giờ 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://<^>your_domain<^>`, tại đây bạn sẽ thấy nội dung như sau:

![description image](https://media.cloudfly.vn/posts/vhost_your_domain.png)

## Bước 6 – Làm quen với các tệp và thư mục quan trọng của Apache

Bây giờ bạn đã biết cách tự quản lý dịch vụ Apache, bạn nên dành vài phút để tự làm quen với một số thư mục và tệp quan trọng.

### Nội dung

* `/var/www/html`: Nội dung web thực tế, theo mặc định chỉ bao gồm trang Apache mặc định mà bạn đã thấy trước đó, được cung cấp ngoài thư mục `/var/www/html`. Điều này có thể được thay đổi bằng cách thay đổi các tệp cấu hình Apache.

### Cấu hình máy chủ

* `/etc/apache2`: Thư mục cấu hình Apache. Tất cả các tệp cấu hình Apache nằm ở đây.
* `/etc/apache2/apache2.conf`: Tệp cấu hình chính của Apache. Điều này có thể được sửa đổi để thay đổi cấu hình toàn cầu của Apache. Tệp này chịu trách nhiệm tải nhiều tệp khác trong thư mục cấu hình.
* `/etc/apache2/ports.conf`: Tệp này chỉ định các cổng mà Apache sẽ lắng nghe. Theo mặc định, Apache lắng nghe trên cổng 80 và bổ sung lắng nghe trên cổng 443 khi mô-đun cung cấp khả năng SSL được bật.
* `/etc/apache2/sites-available/`: Thư mục nơi có thể lưu trữ các máy chủ ảo trên mỗi trang web. Apache sẽ không sử dụng các tệp cấu hình được tìm thấy trong thư mục này trừ khi chúng được liên kết với thư mục `sites-enabled`. Thông thường, tất cả cấu hình khối máy chủ được thực hiện trong thư mục này, sau đó được kích hoạt bằng cách liên kết với thư mục khác bằng lệnh `a2ensite`.
* `/etc/apache2/sites-enabled/`: Thư mục lưu trữ các máy chủ ảo trên mỗi trang đã bật. Thông thường, chúng được tạo bằng cách liên kết với các tệp cấu hình được tìm thấy trong thư mục `sites-available` với `a2ensite`. Apache đọc các tệp cấu hình và các liên kết được tìm thấy trong thư mục này khi nó khởi động hoặc tải lại để biên dịch một cấu hình hoàn chỉnh.
* `/etc/apache2/conf-available/`, `/etc/apache2/conf-enabled/`: Các thư mục này có cùng mối quan hệ với các thư mục `sites-available` và `sites-enabled`, nhưng được sử dụng để lưu trữ các đoạn cấu hình không thuộc về một Máy chủ ảo. Các tệp trong thư mục `conf-available` có thể được kích hoạt bằng lệnh `a2enconf` và bị vô hiệu hóa bằng lệnh `a2disconf`.
* `/etc/apache2/mods-available/`, `/etc/apache2/mods-enabled/`: Các thư mục này lần lượt chứa các mô-đun khả dụng và đã kích hoạt. Các tệp kết thúc bằng `.load` chứa các đoạn để tải các mô-đun cụ thể, trong khi các tệp kết thúc bằng `.conf` chứa cấu hình cho các mô-đun đó. Có thể bật và tắt các mô-đun bằng lệnh `a2enmod` và `a2dismod`.

### Nhật ký máy chủ

* `/var/log/apache2/access.log`: Theo mặc định, mọi yêu cầu đối với máy chủ web của bạn được ghi lại trong tệp nhật ký này trừ khi Apache được cấu hình để thực hiện theo cách khác.
* `/var/log/apache2/error.log`: Theo mặc định, tất cả các lỗi được ghi trong tệp này. Chỉ thị `LogLevel` trong cấu hình Apache chỉ định mức độ chi tiết của nhật ký lỗi.

## Kết luận

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 cho loại nội dung bạn có thể phục vụ và các công nghệ bạn có thể sử dụng để tạo trải nghiệm phong phú hơn.

Nếu bạn muốn xây dựng một ngăn xếp ứng dụng hoàn chỉnh hơn, bạn có thể đọc bài viết này về cách định cấu hình LAMP stack trên Ubuntu 20.04
