CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnCách cấu hình Apache Web Server trên VPS Ubuntu hoặc Debian

Cách cấu hình Apache Web Server trên VPS Ubuntu hoặc Debian

CyStack blog 10 phút để đọc
CyStack blog18/07/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 10 minutes

Apache là một trong những web server phổ biến nhất trên Internet. Nó được sử dụng để phục vụ hơn một nửa số trang web đang hoạt động. Mặc dù có nhiều web server khác cũng có thể phục vụ nội dung của bạn, việc hiểu cách Apache hoạt động vẫn rất hữu ích do tính phổ biến rộng rãi của nó.

cấu hình Apache

Bài viết này sẽ xem xét một số file cấu hình tổng quát và các tùy chọn có thể được kiểm soát trong các file đó. Bài viết sẽ dựa trên cấu trúc tệp cấu hình của Apache trên hệ điều hành Ubuntu/Debian, vốn khác biệt so với cách các bản phân phối khác xây dựng hệ thống cấu hình.

Yêu cầu tiên quyết

Nếu bạn đang sử dụng Ubuntu phiên bản 16.04 hoặc thấp hơn, chúng tôi khuyên bạn nên nâng cấp lên phiên bản mới hơn vì Ubuntu đã ngừng hỗ trợ các phiên bản này.

Một máy chủ đang chạy Ubuntu, cùng với một người dùng không phải root có quyền sudo và tường lửa đang hoạt động. Để được hướng dẫn cách thiết lập các yêu cầu này, vui lòng chọn bản phân phối của bạn từ danh sách sau và làm theo hướng dẫn Thiết lập máy chủ ban đầu của chúng tôi.

Trước khi bắt đầu tìm hiểu cấu hình Apache, bạn cần đảm bảo Apache đã được cài đặt trên máy chủ.

5 bước cấu hình Apache Web Server trên Ubuntu

  1. Cấu trúc thư mục của Apache
  2. Khám phá file cấu hình Apache2.conf
  3. Thiết lập cấu hình toàn cục cho Apache
  4. Cấu hình file Virtual Host của Apache
  5. Kích hoạt các site và module

Bước 1: Cấu trúc thư mục của Apache

Apache lưu các tệp cấu hình chính trong thư mục/etc/apache2. Thực hiện lệnh sau sẽ liệt kê tất cả các tệp trong thư mục này:

ls -f /etc/apache2
Output
envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available

Có một số tệp văn bản thuần và một vài thư mục con bên trong thư mục này. Dưới đây là một số vị trí quan trọng mà bạn nên nắm rõ:

  • apache2.conf: Đây là tệp cấu hình chính của máy chủ. Hầu hết mọi cấu hình đều có thể thực hiện trong tệp này. uy Tuy nhiên để đơn giản và dễ quản lý, bạn nên sử dụng các tệp cấu hình riêng biệt. Tệp này thiết lập các giá trị mặc định và là điểm truy cập trung tâm để máy chủ đọc thông tin cấu hình.
  • ports.conf: Tệp này được dùng để chỉ định các cổng mà các virtual host sẽ lắng nghe. Hãy đảm bảo kiểm tra tệp này nếu bạn đang cấu hình SSL.
  • sites-available/ và sites-enabled/: Thư mục sites-available chứa các tệp cấu hình virtual host. Các cấu hình trong thư mục này xác định nội dung nào sẽ được phục vụ cho các yêu cầu nào. Điều này được kích hoạt bằng cách liên kết với thư mục sites-enabled, nơi lưu trữ các tệp cấu hình virtual host đã được kích hoạt. Khi Apache khởi động hoặc tải lại, nó đọc các tệp cấu hình và các liên kết trong thư mục sites-enabled để biên dịch cấu hình hoàn chỉnh.
  • conf-available/ và conf-enabled/: Hai thư mục này chứa các đoạn cấu hình không gắn liền với các tệp cấu hình virtual host.
  • mods-enabled/ và mods-available/: Hai thư mục này định nghĩa các module có thể được tải một cách tùy chọn. Mỗi thư mục này chứa hai loại tệp: tệp kết thúc bằng .load, chứa đoạn mã dùng để tải các module cụ thể, và tệp kết thúc bằng .conf, chứa các cấu hình của các module đó.

Cấu hình Apache không được thực hiện trong một tệp duy nhất, mà thay vào đó được thực hiện thông qua một thiết kế dạng module, nơi các tệp mới có thể được thêm và chỉnh sửa khi cần thiết.

Bước 2: Khám phá tệp Apache2.conf

Các thông tin cấu hình chính cho máy chủ Apache của bạn được lưu trong tệp/etc/apache2/apache2.conf. Tệp này được chia thành ba phần chính:

  • Cấu hình cho tiến trình máy chủ Apache toàn cục (global server process)
  • Cấu hình cho máy chủ mặc định (default server)
  • Cấu hình cho các virtual host (máy chủ ảo)

Mở tệp này bằng trình soạn thảo văn bản mà bạn ưa thích. Ví dụ dưới đây sử dụng nano:

sudo nano /etc/apache2/apache2.conf

Trong Ubuntu và Debian, tệp này được sử dụng để cấu hình các định nghĩa toàn cục. Việc cấu hình máy chủ mặc định và các virtual host được xử lý thông qua chỉ thị Include. Chỉ thị **Include** cho phép Apache đọc các tệp cấu hình khác vào tệp hiện tại tại vị trí mà câu lệnh xuất hiện. Kết quả là Apache sẽ tạo động một tệp cấu hình tổng thể khi khởi động.

Bên trong tệp này, bạn sẽ thấy nhiều câu lệnh **Include**IncludeOptional khác nhau. Các chỉ thị này được dùng để tải cấu hình của module, tệp ports.conf, các tệp cấu hình cụ thể trong thư mục conf-enabled/ và các định nghĩa virtual host trong thư mục sites-enabled/:

/etc/apache2/apache2.conf
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf

Bước 3: Cấu hình toàn cục cho Apache (Apache Global Configurations)

Có một số tùy chọn bạn có thể muốn điều chỉnh trong phần cấu hình toàn cục:

Timeout (Thời gian chờ)

Theo mặc định, tham số này được đặt là 300. Điều này có nghĩa là máy chủ có tối đa 300 giây để xử lý mỗi yêu cầu. Bạn có thể giảm tham số này một cách an toàn xuống khoảng từ 30 đến 60 giây.

KeepAlive

Tùy chọn này, nếu được đặt là On, sẽ cho phép mỗi kết nối được giữ mở để xử lý nhiều yêu cầu từ cùng một client. Nếu đặt là Off, mỗi yêu cầu sẽ phải thiết lập một kết nối mới, điều này có thể gây tốn kém tài nguyên tùy thuộc vào cấu hình và lưu lượng truy cập của bạn.

MaxKeepAliveRequests

Tham số này kiểm soát số lượng yêu cầu riêng biệt mà mỗi kết nối sẽ xử lý trước khi bị đóng. Việc giữ giá trị này ở mức cao sẽ giúp Apache phục vụ nội dung cho mỗi client hiệu quả hơn. Thiết lập mặc định là 100. Nếu đặt giá trị này là 0, Apache sẽ xử lý không giới hạn số lượng yêu cầu trên mỗi kết nối.

KeepAliveTimeout

Tùy chọn này chỉ định thời gian chờ giữa các yêu cầu liên tiếp. Nếu vượt quá thời gian chờ mà không có yêu cầu mới, kết nối sẽ bị đóng. Điều này có nghĩa là lần tiếp theo khi client yêu cầu nội dung, máy chủ sẽ phải thiết lập lại kết nối để xử lý yêu cầu đó. Mặc định được đặt là 5 giây.

Sau khi xem xét nội dung của tệp cấu hình này, bạn có thể thoát khỏi nó bằng cách nhấn tổ hợp phím CTRL+X.

Mô-đun Xử lý Đa tiến trình (Multi-Processing Modules – MPM)

MPM mở rộng thiết kế mô-đun của Apache. Các MPM chịu trách nhiệm lắng nghe, điều phối và xử lý các yêu cầu mạng khác nhau. Bạn có thể kiểm tra phiên bản Apache của mình được biên dịch với mô-đun nào bằng cách sử dụng lệnh sau:

apache2ctl -L
Output
Compiled in modules:
  core.c
  mod_so.c
  mod_watchdog.c
  http_core.c
  mod_log_config.c
  mod_logio.c
  mod_version.c
  mod_unixd.c

Bạn có thể kiểm tra loại MPM (Multi-Processing Module) trên máy chủ của mình bằng lệnh sau:

a2query -M
Output
event

Đầu ra cho thấy rằng máy chủ này đang sử dụng MPM loại event. Hệ thống của bạn có thể có nhiều mô-đun MPM để lựa chọn, nhưng chỉ có thể kích hoạt một mô-đun tại một thời điểm.

Bước 4: Cập nhật Tệp Virtual Host của Apache

Khai báo virtual host mặc định nằm trong tệp có tên 000-default.conf trong thư mục sites-available/. Bạn có thể tìm hiểu về định dạng tổng quát của một tệp virtual host bằng cách xem nội dung của tệp này.

Mở tệp bằng lệnh sau:

sudo nano /etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…

Virtual host mặc định được cấu hình để xử lý bất kỳ yêu cầu nào trên cổng 80, là cổng chuẩn của HTTP. Điều này được định nghĩa trong phần tiêu đề khai báo là *:80, nghĩa là cổng 80 trên mọi giao diện mạng. Tuy nhiên, điều này không có nghĩa là nó sẽ xử lý mọi yêu cầu đến máy chủ trên cổng này. Apache sẽ sử dụng virtual host cụ thể nhất phù hợp với yêu cầu. Nếu có một định nghĩa cụ thể hơn, nó có thể ghi đè lên định nghĩa mặc định này.

Sau khi xem xong nội dung tệp, bạn có thể thoát bằng cách nhấn CTRL+X.

Cấu hình Virtual Host của Apache

Các tùy chọn sau đây được thiết lập trong phần định nghĩa virtual host, bên ngoài các khai báo cấp thấp khác. Chúng áp dụng cho toàn bộ virtual host.

Đầu tiên, hãy mở tệp security.conf trong thư mục conf-available/ bằng lệnh sau:

sudo nano /etc/apache2/conf-available/security.conf

Tệp này chứa chỉ thị ServerSignature, cho phép bạn chỉ định địa chỉ email liên hệ sẽ được sử dụng khi có sự cố với máy chủ. Bạn có thể thay đổi tùy chọn mặc định từ On sang EMail để hiển thị địa chỉ email của quản trị viên máy chủ. Hãy đảm bảo rằng bạn sẵn sàng nhận email nếu điều chỉnh thiết lập này.

/etc/apache2/conf-available/security.conf
…
ServerSignature EMail
…

Thoát khỏi tệp bằng cách nhấn CTRL+X. Sau khi chỉnh sửa tệp cấu hình, hệ thống sẽ hiện thông báo yêu cầu xác nhận thay đổi. Nhấn Y để lưu thay đổi hoặc N để hủy bỏ.

Trong tệp virtual host của bạn, bạn có thể thêm chỉ thị **ServerName** để chỉ rõ tên miền hoặc địa chỉ IP mà virtual host này sẽ xử lý. Đây là tùy chọn giúp định nghĩa virtual host một cách cụ thể, cho phép nó ghi đè lên cấu hình mặc định nếu giá trị ServerName trùng khớp.

Chạy lệnh sau để mở tệp virtual host, nhớ thay your_domain bằng tên miền thật của bạn:

sudo nano /etc/apache2/sites-available/your_domain.conf

Thêm your_domain vào chỉ thị ServerName.

/etc/apache2/sites-available/your_domain.conf
…
ServerName your_domain
…

Tương tự, bạn cũng có thể làm cho virtual host áp dụng cho nhiều tên miền bằng cách sử dụng chỉ thị ServerAlias. Điều này cho phép nhiều đường dẫn khác nhau truy cập cùng một nội dung. Một ví dụ phổ biến là thêm tên miền có tiền tố www:

/etc/apache2/sites-available/your_domain.conf
…
ServerAlias www.your_domain.com
…

Chỉ thị **DocumentRoot** xác định vị trí lưu trữ nội dung sẽ được phục vụ cho virtual host này. Trên Ubuntu, virtual host mặc định được cấu hình để phục vụ nội dung từ thư mục /var/www/.

/etc/apache2/sites-available/your_domain.conf
…
DocumentRoot /var/www/your_domain/public_html
…

Định nghĩa thư mục

Bên trong phần khai báo virtual host, có các định nghĩa quy định cách máy chủ xử lý các thư mục khác nhau trong hệ thống tệp. Apache sẽ áp dụng tất cả các chỉ thị này theo thứ tự từ đường dẫn ngắn nhất đến dài nhất, vì vậy vẫn có khả năng các tùy chọn trước đó bị ghi đè bởi những tùy chọn sau.

Mở tệp apache2.conf bằng lệnh sau:

sudo nano /etc/apache2/apache2.conf
/etc/apache2/apache2.conf
…
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
…

Định nghĩa thư mục đầu tiên áp dụng các quy tắc cho thư mục gốc /. Đây sẽ là cấu hình cơ bản cho virtual host của bạn, vì nó áp dụng cho tất cả các tệp được phục vụ từ hệ thống tệp. Hãy chú ý đến các tùy chọn cấu hình thư mục cùng với một số chú thích hữu ích được trình bày trong tệp này. Cấu hình mặc định sẽ từ chối quyền truy cập đến tất cả nội dung, trừ khi có quy định khác trong các khai báo thư mục tiếp theo.

Chỉ thị Require được dùng để giới hạn hoặc cho phép truy cập vào các tài nguyên khác nhau trên máy chủ của bạn. Chỉ thị AllowOverride được dùng để quyết định xem tệp .htaccess có được phép ghi đè các thiết lập hiện tại khi đặt trong thư mục nội dung hay không. Theo mặc định, điều này không được cho phép, nhưng có thể rất hữu ích trong nhiều tình huống cụ thể.

Sau khi xem nội dung tệp, bạn có thể thoát bằng cách nhấn CTRL+X.

Các chỉ thị Alias và ScriptAlias

Các khai báo thư mục đôi khi được đặt sau các chỉ thị Alias hoặc ScriptAlias.

Mở tệp cấu hình virtual host của bạn bằng lệnh sau, và thay thế biến your_domain bằng tên miền thực tế của bạn:

sudo nano /etc/apache2/sites-available/your_domain.conf

Chỉ thị Alias ánh xạ một đường dẫn URL tới một đường dẫn thư mục trên hệ thống tệp.

Ví dụ, trong một virtual host xử lý các yêu cầu đến your_domain, cấu hình sau đây sẽ cho phép truy cập vào nội dung trong thư mục /usr/local/apache/content/ khi truy cập địa chỉ:

/etc/apache2/sites-available/your_domain.conf
Alias “/content/” “/usr/local/apache/content/”

Chỉ thị **ScriptAlias** hoạt động tương tự như Alias, nhưng được sử dụng để định nghĩa các thư mục chứa các thành phần có thể thực thi.

/etc/apache2/sites-available/your_domain.conf
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"

Hãy nhớ định nghĩa thư mục với các quyền truy cập phù hợp như đã đề cập trong phần trước. Sau khi hoàn tất việc chỉnh sửa tệp, thoát khỏi tệp bằng cách nhấn CTRL+X. Nếu bạn đã thực hiện bất kỳ thay đổi nào đối với tệp, hãy nhấn Y để lưu các thay đổi hoặc nhấn N để giữ nguyên tệp như trước khi chỉnh sửa cấu hình.

Bước 5: Kích hoạt Các Website và Module

Khi bạn đã có một tệp virtual host đáp ứng yêu cầu của mình, bạn có thể sử dụng các công cụ đi kèm với Apache để chuyển nó thành một website hoạt động thực tế.

Để tạo một liên kết tượng trưng trong thư mục sites-enabled tới một tệp hiện có trong thư mục sites-available, hãy sử dụng lệnh sau. Đảm bảo thay thế your_domain bằng tên tệp cấu hình virtual host của bạn.

sudo a2ensite your_domain

Sau khi kích hoạt một site, hãy chạy lệnh sau để yêu cầu Apache tải lại các tệp cấu hình, giúp thay đổi có hiệu lực:

sudo systemctl restart apache2

Cũng có một lệnh đi kèm để vô hiệu hóa một virtual host. Lệnh này hoạt động bằng cách xóa liên kết tượng trưng khỏi thư mục sites-enabled. Ví dụ, khi virtual host của bạn đã được kích hoạt, bạn có thể vô hiệu hóa site mặc định 000-default bằng lệnh sau:

sudo a2dissite 000-default

Các mô-đun có thể được kích hoạt hoặc vô hiệu hóa bằng cách sử dụng lần lượt các lệnh a2enmoda2dismod. Chúng hoạt động theo cách tương tự như các lệnh a2ensitea2dissite. Ví dụ, để kích hoạt mô-đun info, bạn có thể sử dụng lệnh sau:

sudo a2enmod info

Tương tự, bạn có thể vô hiệu hóa một mô-đun bằng cách sử dụng lệnh a2dismod.

sudo a2dismod info

Hãy nhớ khởi động lại Apache sau khi chỉnh sửa các tệp cấu hình và kích hoạt hoặc vô hiệu hóa các mô-đun.

Kết luận

Apache là một hệ thống linh hoạt và có tính mô-đun cao, vì vậy nhu cầu cấu hình sẽ khác nhau tùy thuộc vào thiết lập của bạn. Sau khi xem qua một số tình huống sử dụng phổ biến ở trên, chắc bạn đã có cái nhìn rõ hơn về các tệp cấu hình chính được dùng để làm gì và chúng tương tác với nhau như thế nào.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất