Máy chủ HTTP Apache là một trong những máy chủ web phổ biến và được sử dụng rộng rãi nhất hiện nay. Nó nổi bật với nhiều tính năng mạnh mẽ, chẳng hạn như hỗ trợ mô-đun có thể tải động, khả năng xử lý đa phương tiện hiệu quả và tích hợp tốt với các phần mềm phổ biến khác.
Nếu bạn đang tìm hiểu cách cài đặt Apache trên CentOS 7, việc sử dụng VPS server chất lượng là yếu tố then chốt. Khám phá các gói VPS server mạnh mẽ, ổn định tại danh mục dịch vụ của chúng tôi để đảm bảo website vận hành mượt mà, hỗ trợ cài đặt máy chủ dễ dàng.
DataOnline sẽ hướng dẫn bạn cách cài đặt và cấu hình máy chủ web Apache cùng với virtual hosts trên hệ thống CentOS 7 của mình.
Yêu cầu
Bạn sẽ cần những điều sau để hoàn thành hướng dẫn này:
● Một người dùng không phải root với quyền sudo đã được cấu hình trên máy chủ của bạn, được thiết lập theo hướng dẫn cài đặt ban đầu cho CentOS 7.
● Một tên miền đã được cấu hình để trỏ về máy chủ của bạn. Bạn có thể tìm hiểu cách trỏ tên miền về DataOnline Droplets bằng cách theo dõi hướng dẫn Cách Thiết Lập Tên Máy Chủ với DataOnline.
● Một firewall cơ bản được cấu hình theo hướng dẫn Các bước khuyến nghị bổ sung cho máy chủ CentOS 7 mới.
Bước 1 – Cài đặt Apache
Apache có sẵn trong kho phần mềm mặc định của CentOS, điều này có nghĩa là bạn có thể cài đặt nó qua trình quản lý gói yum.
Với tư cách là người dùng sudo không phải root đã được cấu hình ở phần Yêu cầu, cập nhật chỉ mục gói Apache httpd cục bộ để phản ánh những thay đổi mới nhất từ upstream:
sudo yum update httpd
Sau khi các gói được cập nhật, tiến hành cài đặt gói Apache:
sudo yum install httpd
Sau khi xác nhận cài đặt, yum sẽ cài đặt Apache và tất cả các phụ thuộc cần thiết.
Nếu bạn đã hoàn thành các bước Các bước khuyến nghị bổ sung cho máy chủ CentOS 7 mới.được đề cập trong phần Yêu cầu, bạn sẽ có firewalld được cài đặt trên máy chủ của mình và bạn cần mở cổng 80 để cho phép Apache phục vụ các yêu cầu qua HTTP. Nếu bạn chưa làm như vậy, bạn có thể mở cổng bằng cách kích hoạt dịch vụ http của firewalld với lệnh sau:
sudo firewall-cmd --permanent --add-service=http
Nếu bạn dự định cấu hình Apache phục vụ nội dung qua HTTPS, bạn cũng sẽ cần mở cổng 443 bằng cách kích hoạt dịch vụ https:
sudo firewall-cmd --permanent --add-service=https
Tiếp theo, tải lại firewall để áp dụng các quy tắc mới:
sudo firewall-cmd --reload
Sau khi firewall được 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 máy chủ Web của bạn
Apache không tự động khởi động trên CentOS ngay sau khi cài đặt xong. Bạn sẽ cần khởi động tiến trình Apache một cách thủ công:
sudo systemctl start httpd
Xác minh rằng dịch vụ đang chạy với lệnh:
sudo systemctl status httpd
Bạn sẽ thấy trạng thái “active” khi dịch vụ đang chạy:
Output Redirecting to /bin/systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND ...
Như bạn có thể thấy từ kết quả trên, dịch vụ đã khởi động thành công. Tuy nhiên, cách tốt nhất để kiểm tra là yêu cầu một trang từ Apache.
Bạn có thể truy cập trang landing mặc định của Apache để xác nhận rằng phần mềm đang chạy chính xác 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ó bằng vài cách khác nhau từ dòng lệnh.
Gõ lệnh sau tại prompt của máy chủ:
hostname -I
Lệnh này sẽ hiển thị tất cả các địa chỉ mạng của máy chủ, nên bạn sẽ nhận được một vài địa chỉ IP được phân tách bởi khoảng trắng. Bạn có thể thử từng địa chỉ trong trình duyệt web của mình để xem có hoạt động hay không.
Ngoài ra, bạn có thể dùng curl
để lấy địa chỉ IP từ icanhazip.com, điều này sẽ cung cấp cho bạn địa chỉ IPv4 công khai như được nhìn thấy từ một vị trí khác trên internet:
curl -4 icanhazip.com
Khi bạn có được địa chỉ IP của máy chủ, nhập nó vào thanh địa chỉ của trình duyệt:
http://your_server_ip
Bạn sẽ thấy trang mặc định của Apache trên CentOS 7:
Giờ đây, khi dịch vụ đã được cài đặt và chạy, bạn có thể sử dụng các lệnh systemctl khác nhau để quản lý dịch vụ.
Bước 3 – Quản lý quá trình Apache
Giờ đây, khi máy chủ web của bạn đã hoạt động, hãy cùng xem qua một số lệnh quản lý cơ bản.
Để dừng máy chủ web của bạn, gõ:
sudo systemctl stop httpd
Để khởi động máy chủ khi nó đang dừng, gõ:
sudo systemctl start httpd
Để dừng rồi khởi động lại dịch vụ, gõ:
sudo systemctl restart httpd
Nếu bạn chỉ đang thực hiện các thay đổi cấu hình, Apache có thể chỉ cần reload mà không ngắt kết nối. Để làm điều này, sử dụng lệnh:
sudo systemctl reload httpd
Theo mặc định, Apache được cấu hình để khởi động tự động khi máy chủ khởi động. Nếu bạn không muốn điều này, hãy vô hiệu hóa hành vi này bằng lệnh:
sudo systemctl disable httpd
Để kích hoạt lại dịch vụ để khởi động cùng máy chủ, gõ:
sudo systemctl enable httpd
Apache sẽ tự khởi động khi máy chủ khởi động lại.
Cấu hình mặc định của Apache cho phép máy chủ của bạn host một website duy nhất. Nếu bạn dự định host nhiều tên miền trên máy chủ của mình, bạn sẽ cần cấu hình virtual hosts cho máy chủ Apache.
Bước 4 – Cấu hình Virtual Hosts
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 các chi tiết cấu hình và host nhiều tên miền trên 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à your_domain
, nhưng bạn nên thay thế bằng tên miền thực của bạn.
Apache trên CentOS 7 có một server block được bật mặ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 website duy nhất, nhưng nó có thể trở nên khó quản lý nếu bạn host nhiều trang. Thay vì chỉnh sửa /var/www/html
, bạn sẽ tạo cấu trúc thư mục trong /var/www
cho trang your_domain
, trong khi giữ /var/www/html
làm thư mục mặc định được phục vụ nếu không có yêu cầu khớp với bất kỳ trang nào khác.
Tạo thư mục html cho your_domain
như sau, sử dụng cờ -p
để tạo các thư mục cha cần thiết:
sudo mkdir -p /var/www/your_domain/html
Tạo thêm một thư mục để lưu trữ các tập tin log cho trang web:
sudo mkdir -p /var/www/your_domain/log
Tiếp theo, gán quyền sở hữu cho thư mục html sử dụng biến môi trường $USER
:
sudo chown -R $USER:$USER /var/www/your_domain/html
Đảm bảo rằng thư mục gốc của web có quyền truy cập mặc định:
sudo chmod -R 755 /var/www
Tiếp theo, tạo một trang mẫu index.html
sử dụng vi
hoặc trình soạn thảo yêu thích của bạn:
sudo vi /var/www/your_domain/html/index.html
Nhấn i
để chuyển sang chế độ INSERT và thêm đoạn HTML mẫu sau vào tập tin:
<html> <head> <title>Welcome to your website!</title> </head> <body> <h1>Success! The your_domain virtual host is working!</h1> </body> </html>
Lưu và thoát tập tin bằng cách nhấn ESC
, gõ :wq
và nhấn ENTER
.
Với thư mục website và tập tin index mẫu đã có, bạn gần như đã sẵn sàng để tạo các tập tin virtual host. Các tập tin virtual host chỉ định cấu hình cho các trang riêng biệt và báo cho Apache biết cách phản hồi với các yêu cầu tên miền khác nhau.
Trước khi tạo virtual hosts, bạn sẽ 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
để báo cho Apache rằng một virtual host đã sẵn sàng phục vụ khách truy cập. Thư mục sites-enabled
sẽ chứa các liên kết tượng trưng tới các virtual host mà bạn muốn công khai. Tạo cả hai thư mục bằng lệnh:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Tiếp theo, bạn sẽ báo cho Apache tìm kiếm virtual hosts trong thư mục sites-enabled
. Để thực hiện điều này, hãy chỉnh sửa tập tin cấu hình chính của Apache và thêm một dòng khai báo một thư mục tùy chọn cho các tập tin cấu hình bổ sung:
sudo vi /etc/httpd/conf/httpd.conf
Thêm dòng sau vào cuối tập tin:
IncludeOptional sites-enabled/*.conf
Lưu và thoát tập tin khi bạn đã thêm xong dòng này. Giờ đây, khi bạn đã có các thư mục virtual host, hãy tạo tập tin virtual host của bạn.
Bắt đầu bằng cách tạo một tập tin mới trong thư mục sites-available
:
sudo vi /etc/httpd/sites-available/your_domain.conf
Thêm vào khối cấu hình sau, thay thế tên miền your_domain
bằng tên miền thực của bạn:
/etc/httpd/sites-available/your_domain.conf <VirtualHost *:80> ServerName www.your_domain ServerAlias your_domain DocumentRoot /var/www/your_domain/html ErrorLog /var/www/your_domain/log/error.log CustomLog /var/www/your_domain/log/requests.log combined </VirtualHost>
Dòng lệnh này báo cho Apache biết thư mục chứa tài liệu web công khai và nơi lưu trữ các tập tin log lỗi và log yêu cầu cho trang web cụ thể này.
Lưu và thoát tập tin khi bạn đã hoàn tất.
Giờ đây, khi bạn đã tạo các tập tin virtual host, hãy kích hoạt chúng để Apache biết rằng chúng sẵn sàng phục vụ khách truy cập. Để làm điều này, tạo một liên kết tượng trưng cho mỗi virtual host trong thư mục sites-enabled
:
sudo ln -s /etc/httpd/sites-available/your_domain.conf /etc/httpd/sites-enabled/your_domain.conf
Virtual host 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 phù hợp cho virtual hosts của bạn.
Bước 5 – Điều chỉnh quyền SELinux cho Virtual Hosts
SELinux được cấu hình để làm việc với cấu hình mặc định của Apache. Vì bạn đã thiết lập một thư mục log tùy chỉnh trong tập tin cấu hình virtual hosts, bạn sẽ gặp lỗi nếu khởi động dịch vụ Apache mà không điều chỉnh. Để khắc phục điều 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 tin cần thiết. SELinux mang lại mức độ bảo mật cao cho môi trường CentOS 7, vì vậy không nên vô hiệu hóa toàn bộ module kernel này.
Có nhiều cách để thiết lập chính sách dựa trên nhu cầu môi trường của bạn, vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật. Bước này sẽ giới thiệu hai phương pháp điều chỉnh chính sách Apache: áp dụng toàn cầu và theo thư mục cụ thể. Điều chỉnh theo thư mục được đánh giá là an toàn hơn, do đó đây là cách khuyến nghị.
Điều chỉnh chính sách Apache toàn cầu
Việc thiết lập chính sách Apache một cách toàn cầu sẽ báo cho SELinux xử lý tất cả các tiến trình Apache theo cùng một kiểu bằng cách sử dụng boolean httpd_unified
. Mặc dù phương pháp này tiện lợi hơn, nhưng nó sẽ không mang lại mức kiểm soát như phương pháp điều chỉnh tập trung vào từng tập tin hoặc thư mục.
Chạy lệnh sau để thiết lập chính sách Apache toàn cầu:
sudo setsebool -P httpd_unified 1
Lệnh setsebool
thay đổi các giá trị boolean của SELinux. Cờ -P
sẽ cập nhật giá trị khởi động, giúp thay đổi này được duy trì qua các lần khởi động lại. httpd_unified
là boolean báo cho SELinux xử lý tất cả các tiến trình Apache theo cùng một loại, vì vậy bạn đã kích hoạt nó với giá trị 1.
Điều chỉnh chính sách Apache cho thư mục
Thiết lập quyền SELinux riêng cho thư mục /var/www/your_domain/log
sẽ mang lại cho bạn nhiều quyền kiểm soát hơn đối với các chính sách Apache, nhưng có thể đòi hỏi bảo trì nhiều hơn. Vì phương pháp này không áp dụng toàn cục, bạn sẽ cần thiết lập lại ngữ cảnh cho bất kỳ thư mục log mới nào được chỉ định trong cấu hình virtual host của bạn.
Đầu tiên, kiểm tra ngữ cảnh mà SELinux đã gán cho thư mục /var/www/your_domain/log
:
sudo ls -dZ /var/www/your_domain/log/
Lệnh này liệt kê và in ra ngữ cảnh SELinux của thư mục. Bạn sẽ thấy đầu ra tương tự như sau:
Output drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/log/
Ngữ cảnh hiện tại là httpd_sys_content_t
, báo cho SELinux rằng tiến trình Apache chỉ có thể đọc các tập tin tạo trong thư mục này. Trong hướng dẫn này, bạn sẽ thay đổi ngữ cảnh của thư mục /var/www/your_domain/log
sang httpd_log_t
. Loại này sẽ cho phép Apache tạo và ghi thêm vào các tập tin log của ứng dụng web:
sudo semanage fcontext -a -t httpd_log_t "/var/www/your_domain/log(/.*)?"
Tiếp theo, sử dụng lệnh restorecon
để áp dụng các thay đổi và đảm bảo chúng được duy trì qua các lần khởi động:
sudo restorecon -R -v /var/www/your_domain/log
Cờ -R
chạy lệnh này đệ quy, nghĩa là nó sẽ cập nhật tất cả các tập tin hiện có theo ngữ cảnh mới. Cờ -v
sẽ in ra các thay đổi ngữ cảnh mà lệnh đã thực hiện. Bạn sẽ thấy đầu ra xác nhận các thay đổi:
Output restorecon reset /var/www/your_domain/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
Bạn có thể liệt kê lại ngữ cảnh một lần nữa để xem thay đổi:
sudo ls -dZ /var/www/your_domain/log/
Đầu ra sẽ phản ánh ngữ cảnh cập nhật:
Output drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/your_domain/log
Giờ đây, khi thư mục /var/www/your_domain/log
đang sử dụng loại ngữ cảnh httpd_log_t
, bạn đã sẵn sàng kiểm tra cấu hình virtual host của mình.
Bước 6 – Kiểm tra Virtual Host
Sau khi ngữ cảnh SELinux đã được cập nhật bằng một trong các phương pháp trên, Apache sẽ có thể ghi vào thư mục /var/www/your_domain/log
. Giờ đây, bạn có thể khởi động lại dịch vụ Apache thành công:
sudo systemctl restart httpd
Kiểm tra nội dung của thư mục /var/www/your_domain/log
để xem Apache đã tạo các tập tin log hay chưa:
ls -lZ /var/www/your_domain/log
Bạn sẽ thấy rằng Apache đã tạo ra các tập tin error.log
và requests.log
được chỉ định trong cấu hình virtual host:
Output -rw-r--r--. 1 root root 0 Feb 26 22:54 error.log -rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
Giờ đây, khi bạn đã cấu hình virtual host và cập nhật 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 truy cập vào http://your_domain
, nơi bạn sẽ thấy giao diện như sau:
Điều này xác nhận rằng virtual host của bạn đã được cấu hình thành công và đang phục vụ nội dung. Lặp lại Bước 4 và 5 để tạo virtual host mới với quyền SELinux cho các tên miền bổ sung.
Kết luận
Trong bài hướng dẫn này, bạn đã hoàn thành việc cài đặt và cấu hình máy chủ web Apache. Giờ đây, với máy chủ web đã sẵn sàng, bạn có thể lựa chọn và triển khai nhiều loại nội dung khác nhau, đồng thời áp dụng các công nghệ đa dạng để tạo ra những trải nghiệm người dùng phong phú và linh hoạt hơn.
Để tối ưu hóa máy chủ Apache, chọn VPS phù hợp là rất quan trọng. Hãy xem danh mục giá thuê VPS của chúng tôi để tìm hiểu các gói giá thuê VPS hợp lý, giúp bạn tiết kiệm chi phí mà vẫn đảm bảo hiệu suất cao cho website của mình.