Ngày đăng: 25 tháng 10 năm 2023
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ẽ tìm hiểu cách cài đặt máy chủ web Apache trên máy chủ Ubuntu 22.04 của mình.
Trước khi bắt đầu hướng dẫn này, bạn sẽ cần thiết lập máy chủ Ubuntu 22.04 với non-root user với đặc quyền sudo
và bật tường lửa để chặn các cổng không cần thiết. Bạn có thể tìm hiểu cách thực hiện việc này bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu cho Ubuntu 22.04 của chúng tôi.
Khi bạn đã thiết lập xong, hãy đăng nhập với tư cách là non-root user và tiến hành bước đầu tiên.
Apache có sẵn trong kho phần mềm mặc định của Ubuntu, giúp bạn có thể cài đặt nó bằng các công cụ quản lý gói thông thường.
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:
- 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.
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. Nếu bạn làm theo hướng dẫn trong đ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 số 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 cấu hình ứng dụng ufw
bằng cách chạy như sau:
- sudo ufw app list
Đầu ra của bạn sẽ là danh sách các hồ sơ ứng dụng:
OutputAvailable applications:
Apache
Apache Full
Apache Secure
OpenSSH
Như được chỉ ra trong đầu ra, có ba cấu hình có sẵn cho Apache:
Apache
: Cấu hình 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 truy cập đượ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 bạn đã định cấu hình. Vì bạn chưa định cấu hình SSL cho máy chủ của mình trong hướng dẫn này nên bạn chỉ cần cho phép lưu lượng truy cập trên cổng 80
:
- sudo ufw allow 'Apache'
Bạn có thể xác minh thay đổi bằng cách kiểm tra trạng thái:
- sudo ufw status
Đầu ra sẽ cung cấp danh sách lưu lượng HTTP được phép:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Như được chỉ ra ở đầu ra, cấu hình đã được kích hoạt để cho phép truy cập vào máy chủ web Apache.
Khi kết thúc quá trình cài đặt, Ubuntu 22.04 khởi động Apache. Máy chủ web sẽ được thiết lập và chạy.
Đảm bảo dịch vụ đang hoạt động bằng cách chạy lệnh cho hệ thống init systemd
:
- sudo systemctl status apache2
Output● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
Active: active (running) since Tue 2022-04-26 15:33:21 UTC; 43s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 5089 (apache2)
Tasks: 55 (limit: 1119)
Memory: 4.8M
CPU: 33ms
CGroup: /system.slice/apache2.service
├─5089 /usr/sbin/apache2 -k start
├─5091 /usr/sbin/apache2 -k start
└─5092 /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 Apache landing page 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 của máy chủ, bạn có thể lấy địa chỉ đó bằng một số cách khác nhau từ dòng lệnh.
Hãy thử viết dòng sau tại dấu nhắc lệnh của máy chủ của bạn:
- hostname -I
Bạn sẽ nhận được một vài địa chỉ cách nhau 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 lựa chọn khác là sử dụng công cụ ianhazip.com
miễn phí. Đây là một trang web mà khi được truy cập sẽ trả về địa chỉ IP công cộng của máy của bạn dưới dạng đượ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 Apache Ubuntu 22.04 mặc định như sau:
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ây giờ bạn đã thiết lập và chạy máy chủ web của mình, hãy xem lại một số lệnh quản lý cơ bản bằng systemctl
.
Để dừng máy chủ web của bạn, hãy chạy:
- sudo systemctl stop apache2
Để khởi động máy chủ web khi nó bị dừng, hãy chạy:
- sudo systemctl start apache2
Để dừng và sau đó bắt đầu lại dịch vụ, hãy chạy:
- 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. Để thực hiện việc này, hãy sử dụng lệnh sau:
- 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 tắt hành vi này bằng cách chạy:
- sudo systemctl disable apache2
Để kích hoạt lại dịch vụ để khởi động khi boot, hãy chạy:
- sudo systemctl enable apache2
Apache bây giờ sẽ tự động khởi động khi máy chủ boot lại.
Khi sử dụng máy chủ web Apache, bạn có thể sử dụng máy chủ ảo (tương tự như server blocks trong Nginx) để gói gọn chi tiết cấu hình và lưu trữ nhiều tên miền từ một máy chủ. Chúng tôi sẽ thiết lập một miền có tên your_domain, nhưng bạn nên thay thế tên miền này bằng tên miền của riêng bạn.
Apache trên Ubuntu 22.04 có một server block được bật theo mặc định được định cấu hình để phục vụ các 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 trong /var/www
cho trang your_domain, để lại /var/www/html
làm thư mục mặc định sẽ được cung cấp nếu yêu cầu của khách hàng không khớp với bất kỳ yêu cầu nào khác các trang web.
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 thư mục cho người dùng mà bạn hiện đang đăng nhập bằng biến môi trường $USER
:
- sudo chown -R $USER:$USER /var/www/your_domain
Các quyền của web root của bạn phải chính xác nếu bạn chưa sửa đổi giá trị umask
, giá trị này sẽ đặt quyền truy cập 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:
- sudo chmod -R 755 /var/www/your_domain
Tiếp theo, tạo một trang index.html
mẫu bằng nano
hoặc trình chỉnh sửa yêu thích của bạn:
- sudo nano /var/www/your_domain/index.html
Bên trong, thêm HTML mẫu sau:
<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 tin khi bạn hoàn tất. Nếu bạn đang sử dụng nano
, bạn có thể thực hiện việc này bằng cách nhấn CTRL + X
, sau đó nhấn Y
và ENTER
.
Để Apache phục vụ nội dung này, cần 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
:
- sudo nano /etc/apache2/sites-available/your_domain.conf
Thêm vào khối cấu hình dưới đây, nó 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 bạn:
<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 và ServerAdmin
thành email mà quản trị viên trang your_domain có thể truy cập. Chúng tôi cũng đã thêm hai lệnh: 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 tin khi bạn hoàn tất.
Bây giờ kích hoạt tệp bằng công cụ a2ensite
:
- sudo a2ensite your_domain.conf
Vô hiệu hóa trang mặc định được xác định trong 000-default.conf
:
- sudo a2dissite 000-default.conf
Tiếp theo, kiểm tra lỗi cấu hình:
- sudo apache2ctl configtest
Bạn sẽ nhận được kết quả đầu ra sau:
Output. . .
Syntax OK
Khởi động lại Apache để thực hiện 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 nội dung như sau:
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.
/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 bên 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./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. Điều này có thể được sửa đổi để thực hiện các thay đổi đối với cấu hình toàn cầu 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ẽ listen. Theo mặc định, Apache listen trên cổng 80
và bổ sung listen 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ác máy chủ ảo trên mỗi trang 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ục sites-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 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 đã kích hoạt trên mỗi trang. 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ục sites-available
với tệp 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 site-available
và site-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 bậ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 có sẵn và được 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ác mô-đun có thể được bật và tắt bằng lệnh a2enmod
và a2dismod
./var/log/apache2/access.log
: Theo mặc định, mọi yêu cầu tới 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 định cấu hình để thực hiện 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. Lệnh LogLevel
trong cấu hình Apache chỉ định mức độ chi tiết của nhật ký lỗi.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 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 22.04