Apache HTTP server là máy chủ web được sử dụng phổ biến 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 module có thể tải động, hỗ trợ đa 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, 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.
Đơn giản hóa việc triển khai ứng dụng lên máy chủ với DataOnline App Platform. Triển khai trực tiếp từ GitHub chỉ trong vài phút.
Điều kiện tiên quyết
Trước khi bắt đầu hướng dẫn này, bạn nên có một người dùng thông thường, không phải root với đặc quyền sudo được 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 thiết yếu. Bạn có thể tìm hiểu cách 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 của chúng tôi cho Ubuntu 20.04.
Khi bạn có sẵn một tài khoản, hãy đăng nhập với tư cách người dùng không phải root của bạn để bắt đầu.
Bước 1 – Cài đặt Apache
Apache có sẵn trong các kho phần mềm mặc định của Ubuntu, giúp có thể cài đặt nó bằng các công cụ quản lý gói thông thường.
sudo apt update
Sau đó, cài đặt gói apache2
:
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 Firewall
Trước khi kiểm tra Apache, cần phải sửa đổi cài đặt tường lửa để cho phép truy cập từ bên ngoài vào các cổng web mặc định. Giả sử bạn đã làm theo hướng dẫn trong phần điều kiện tiên quyết, bạn sẽ có tường lửa UFW được cấu hình để hạn chế quyền truy cập vào máy chủ của bạn.
Trong quá trình cài đặt, Apache tự đăng ký với UFW để cung cấp một số hồ sơ ứ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õ:
sudo ufw app list
Bạn sẽ nhận được danh sách các hồ sơ ứng dụng:
Output
Available applications: Apache Apache Full Apache Secure OpenSSH
Như đã chỉ ra bởi output, có ba hồ sơ có sẵn cho Apache:
- Apache: Hồ sơ này chỉ mở cổng 80 (lưu lượng web không mã hóa thông thường)
- Apache Full: Hồ sơ này mở cả cổng 80 (lưu lượng web không mã hóa thông thường) và cổng 443 (lưu lượng được mã hóa TLS/SSL)
- Apache Secure: Hồ sơ này chỉ mở cổng 443 (lưu lượng được mã hóa TLS/SSL)
Bạn nên bật hồ sơ hạn chế nhất mà vẫn cho phép lưu lượng bạn đã cấu hình. Vì chúng ta chưa cấu hình SSL cho máy chủ của mình trong hướng dẫn này, chúng ta sẽ chỉ cần cho phép lưu lượng trên cổng 80:
sudo ufw allow 'Apache'
Bạn có thể xác minh thay đổi bằng cách gõ:
sudo ufw status
Output sẽ cung cấp danh sách lưu lượng HTTP được cho phép:
Output
Bước 3 – Kiểm tra Web Server của bạn
Vào cuối quá trình cài đặt, Ubuntu 20.04 khởi động Apache. Máy chủ web đã sẵn sàng hoạt động.
Kiểm tra với hệ thống khởi tạo systemd
để đảm bảo dịch vụ đang chạy bằng cách gõ:
sudo systemctl status apache2
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
Dựa vào kết quả này, có thể thấy dịch vụ đã chạy thành công. Nhưng, để chắc chắn nhất, ta nên thử truy cập 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 đú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 nó theo một vài cách khác nhau từ dòng lệnh.
Hãy thử gõ lệnh này tại dấu nhắc lệnh của máy chủ:
hostname -I
Bạn sẽ nhận lại một vài địa chỉ cách nhau bằng dấu cách. Bạn có thể thử từng địa chỉ trong trình duyệt web để xác định xem chúng có hoạt động không.
Một lựa chọn khác là sử dụng công cụ Icanhazip, sẽ cung cấp cho bạn địa chỉ IP công khai như đọ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 nó vào thanh địa chỉ trình duyệt của bạn:
http://your_server_ip
Bạn sẽ thấy trang web Apache mặc định của Ubuntu 20.04:
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 và vị trí thư mục Apache quan trọng.
Bước 4 – Quản lý quy trình Apache
Bây giờ bạn đã có máy chủ web đang chạy, hãy xem qua một số lệnh quản lý cơ bản bằng cách sử dụng systemctl
.
Để dừng máy chủ web của bạn, gõ:
sudo systemctl stop apache2
Để khởi động máy chủ web khi nó bị dừng, gõ:
sudo systemctl stop apache2
Để dừng và sau đó khởi động lại dịch vụ, gõ:
sudo systemctl restart apache2
Nếu bạn chỉ đang thực hiện các thay đổi cấu hình, Apache thường có thể tải lại mà không cần ngắt kết nối. Để làm điều này, sử dụng lệnh này:
sudo systemctl reload apache2
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 vô hiệu hóa hành vi này bằng cách gõ:
sudo systemctl disable apache2
Để kích hoạt lại dịch vụ để khởi động khi khởi động, gõ:
sudo systemctl enable apache2
Apache bây giờ sẽ tự động khởi động khi máy chủ khởi động lại.
Bước 5 – Thiết lập Virtual Hosts (Khuyến nghị)
Khi sử dụng máy chủ web Apache, bạn có thể sử dụng virtual hosts (tương tự như server blocks trong Nginx) để đóng gói chi tiết cấu hình và lưu trữ nhiều hơn một domain từ một máy chủ duy nhất. Chúng ta sẽ thiết lập một domain có tên your_domain, nhưng bạn nên thay thế nó bằng tên miền của riêng bạn. Nếu bạn đang thiết lập tên miền với DataOnline, vui lòng tham khảo Tài liệu Mạng của chúng tôi.
Apache trên Ubuntu 20.04 có một server block được bật mặc định đượ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, nó có thể trở nên khó quản lý nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html
, hãy tạo một cấu trúc thư mục trong /var/www
cho một trang web your_domain, giữ /var/www/html
như thư mục mặc định để đượ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ỳ trang nào khác.
Tạo thư mục cho your_domain như sau:
sudo mkdir /var/www/your_domain
Tiếp theo, gán quyền sở hữu của thư mục với biến môi trường $USER
:
sudo chown -R $USER:$USER /var/www/your_domain
Quyền của các thư mục web roots của bạn sẽ chính xác nếu bạn chưa sửa đổi giá trị umask, thiết lập quyền tệp mặc định. Để đảm bảo rằng 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 nhóm và những người khác, bạn có thể nhập lệnh sau:
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 soạn thảo yêu thích của bạn:
sudo nano /var/www/your_domain/index.html
Bên trong, thêm mã HTML mẫu sau:
/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 thành.
Để Apache phục vụ nội dung này, cần thiết phải tạo một tệp virtual host 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 nằm 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
:
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ập nhật cho thư mục và tên miền mới của chúng ta:
/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 ta đã cập nhật DocumentRoot
sang thư mục mới và ServerAdmin
sang một email mà quản trị viên trang your_domain có thể truy cập. Chúng ta cũng đã thêm hai chỉ thị: ServerName
, thiết lập tên miền cơ sở mà phải khớp cho định nghĩa virtual host này, và ServerAlias
, định nghĩa thêm các tên khác nên khớp như thể chúng là tên cơ sở.
Lưu và đóng tệp khi bạn hoàn thành.
Hãy bật tệp với công cụ a2ensite
:
sudo a2ensite your_domain.conf
Tắt trang mặc định được định nghĩa trong 000-default.conf
:
sudo a2dissite 000-default.conf
Tiếp theo, hãy kiểm tra lỗi cấu hình:
sudo apache2ctl configtest
Bạn sẽ nhận được output sau:
Output
Syntax OK
Khởi động lại Apache để triển khai các thay đổi của bạn:
sudo systemctl restart apache2
Apache bây giờ 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, nơi bạn sẽ thấy điều gì đó như thế này:
Bước 6 – Làm quen với các tệp và thư mục Apache quan trọng
Bây giờ bạn đã biết cách quản lý dịch vụ Apache, bạn nên dành vài phú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ế, mặc định chỉ bao gồm trang Apache mặc định bạn đã thấy trước đó, được phục vụ từ 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 đều nằm ở đây./etc/apache2/apache2.conf
: Tệp cấu hình Apache chính. Tệp này có thể được sửa đổi để thay đổi cấu hình toàn cục 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à thêm vào đó lắng nghe trên cổng 443 khi một module cung cấp khả năng SSL được bật./etc/apache2/sites-available/
: Thư mục nơi các virtual host cho từng trang web có thể được lưu trữ. 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ụcsites-enabled
. Thông thường, tất cả cấu hình server block được thực hiện trong thư mục này, và sau đó được bật bằng cách liên kết đến thư mục khác với lệnha2ensite
./etc/apache2/sites-enabled/
: Thư mục nơi các virtual host cho từng trang web được bật được lưu trữ. Thông thường, chúng được tạo bằng cách liên kết đến các tệp cấu hình được tìm thấy trong thư mụcsites-available
vớia2ensite
. Apache đọc các tệp cấu hình và 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ệ như các thư mụcsites-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 virtual host. Các tệp trong thư mụcconf-available
có thể được bật với lệnha2enconf
và tắt với lệnha2disconf
./etc/apache2/mods-available/
,/etc/apache2/mods-enabled/
: Các thư mục này chứa các module có sẵn và đã bật, tương ứng. Các tệp kết thúc bằng.load
chứa các đoạn để tải các module cụ thể, trong khi các tệp kết thúc bằng.conf
chứa cấu hình cho các module đó. Các module có thể được bật và tắt bằng lệnha2enmod
vàa2dismod
.
Nhật ký máy chủ
/var/log/apache2/access.log
: Theo mặc định, mọi yêu cầu đến máy chủ web của bạn đều được ghi lại trong tệp nhật ký này trừ khi Apache được cấu hình để làm khác./var/log/apache2/error.log
: Theo mặc định, tất cả các lỗi đều được ghi lại trong tệp này. Chỉ thịLogLevel
trong cấu hình Apache chỉ định mức độ chi tiết mà nhật ký lỗi sẽ chứa.
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 lựa 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 ra trải nghiệm phong phú hơn.
Nếu bạn muốn xây dựng một stack ứng dụng hoàn chỉnh hơn, bạn có thể đọc bài viết này về cách cấu hình một LAMP stack trên Ubuntu 20.04