Cài đặt Apache Web Server trên CentOS 7 - Install Apache Web Server on CentOS 7

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ẽ install máy chủ web Apache với máy chủ ảo trên máy chủ CentOS 7 của mình.

Chuẩn bị trước khi cài đặt

Bạn sẽ cần những điều sau đây để hoàn thành hướng dẫn install Apache trên CentOS 7:

  • Người dùng không phải root có đặc quyền sudo được định cấu hình trên máy chủ.
  • Một tên miền được cấu hình để trỏ đến máy chủ của bạn. 
  • Tường lửa cơ bản được định cấu hình

Bước 1: Install Apache

Apache có sẵn trong kho phần mềm mặc định của CentOS, có nghĩa là bạn có thể cài đặt nó bằng 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 trong các yêu cầu ban đầu, cập nhật chỉ số gói Apache httpd cục bộ để phản ánh các thay đổi mới nhất từ nguồn gốc:

sudo yum update httpd

Khi các gói được cập nhật, hãy 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 yêu cầu trong chuẩn bị bước đầu, bạn sẽ cài đặt tường lửa trên máy chủ của mình và bạn sẽ cần mở cổng 80 để cho phép Apache phân phát yêu cầu qua HTTP. Nếu bạn chưa làm, bạn có thể thực hiện việc này bằng cách bật dịch vụ http của tường lửa bằng lệnh sau:

sudo firewall-cmd --permanent --add-service=http

Nếu bạn dự định định cấu hình Apache để phân phát nội dung qua HTTPS, bạn cần mở cổng 443 bằng cách bật dịch vụ https:

sudo firewall-cmd --permanent --add-service=https

Tiếp theo, tải lại tường lửa để các quy tắc mới này có hiệu lực:

sudo firewall-cmd --reload

Sau khi tường lửa 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 Web Server

Apache không tự động khởi động trên CentOS sau khi quá trình cài đặt hoàn tất. Bạn sẽ cần bắt đầu quá trình Apache theo cách thủ công:

sudo systemctl start httpd

Xác minh dịch vụ đang chạy bằng lệnh sau:

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ừ đầu ra này, dịch vụ dường như đã khởi động 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 hoạt động đúng cách 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ủ của mình, bạn có thể lấy nó qua một số cách khác nhau từ dòng lệnh.

Gõ lệnh sau tại dòng lệnh của máy chủ của bạn:

hostname -I

Lệnh này sẽ hiển thị tất cả các địa chỉ mạng của máy chủ, vì vậy bạn sẽ nhận được một vài địa chỉ IP được phân tách bằng khoảng trắng. Bạn có thể thử từng địa chỉ này trong trình duyệt web của bạn để kiểm tra xem chúng có hoạt động không.

Hoặc bạn có thể sử dụng lệnh curl để yêu cầu địa chỉ IP của bạn từ trang web icanhazip.com, đây sẽ cung cấp cho bạn địa chỉ IPv4 công khai của bạn như được thấy 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 CentOS 7 Apache mặc định:

trang mặc định apache centos 7

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ờ dịch vụ đã được cài đặt và chạy, bây giờ bạn có thể sử dụng các lệnh systemctl khác nhau để quản lý dịch vụ.v

Bước 3: Quản lý 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.

Để tắt máy chủ web của bạn, gõ:

sudo systemctl stop httpd

Để khởi động máy chủ web khi nó đã bị tắt, gõ:

sudo systemctl start httpd

Để tắt và sau đó khởi động dịch vụ lại, gõ:

sudo systemctl restart httpd

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:

sudo systemctl reload httpd

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, vô hiệu hóa chức năng này bằng cách gõ:

sudo systemctl disable httpd

Để kích hoạt lại dịch vụ để khởi động khi khởi động, hãy gõ:

sudo systemctl enable httpd

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

Cấu hình mặc định cho Apache sẽ cho phép máy chủ của bạn lưu trữ một trang web. Nếu bạn định lưu trữ nhiều tên miền trên máy chủ của mình, bạn sẽ cần định cấu hình máy chủ ảo trên máy chủ web Apache của mình.

Bước 4: Thiết lập máy chủ ảo (Tùy chọn) 

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ư khối máy chủ trong Nginx) để đóng gói các chi tiết cấu hình và chứa nhiều tên miền từ 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ế điều này bằng tên miền riêng của bạn.

Trên CentOS 7, Apache có một khối máy chủ được kích hoạ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, nhưng nếu bạn đang lưu trữ nhiều trang web, nó có thể trở nên khó kiểm soát. Thay vì sửa đổi /var/www/html, bạn sẽ tạo một cấu trúc thư mục trong /var/www cho trang web your_domain, giữ /var/www/html nguyên vẹn là 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 web nào khác.

Tạo thư mục html cho your_domain như sau, sử dụng cờ -p để tạo bất kỳ thư mục cha cần thiết:

sudo mkdir -p /var/www/your_domain/html

Tạo thêm thư mục để lưu file log cho site:

sudo mkdir -p /var/www/your_domain/log

Tiếp theo, gán quyền sở hữu thư mục html với biến môi trường $USER:

sudo chown -R $USER:$USER /var/www/your_domain/html

Đảm bảo rằng web root của bạn có bộ quyền mặc định:

sudo chmod -R 755 /var/www

Tiếp theo, tạo một trang index.html mẫu bằ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 HTML mẫu sau vào tệp:

/var/www/your_domain/html/index.html
<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à đóng tệp bằng cách nhấn ESC, gõ :wq và nhấn ENTER.

Sau khi bạn đã có thư mục trang web và tệp index mẫu trong đúng vị trí, bạn gần như đã sẵn sàng để tạo các tệp máy chủ ảo. Các tệp máy chủ ảo chỉ định cấu hình của các trang web riêng lẻ của bạn và cho biết máy chủ web Apache phải phản hồi cho các yêu cầu tên miền khác nhau.

Trước khi tạo các máy chủ ảo của bạn, bạn 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 để thông báo cho Apache rằng một máy chủ ảo đã 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 đến các máy chủ ảo mà chúng ta muốn xuất bản. Hãy tạo cả hai thư mục này bằng lệnh sau:

sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled

Tiếp theo, bạn sẽ cho Apache biết tìm máy chủ ảo trong thư mục sites-enabled. Để làm điều này, chỉnh sửa tệp cấu hình chính của Apache và thêm một dòng khai báo thư mục tùy chọn cho các tệp cấu hình bổ sung:

sudo vi /etc/httpd/conf/httpd.conf

Thêm dòng này vào cuối tập tin:

IncludeOptional sites-enabled/*.conf

Lưu và đóng tệp khi bạn đã thêm dòng đó xong. Bây giờ bạn đã có các thư mục máy chủ ảo ở đúng vị trí, bạn sẽ tạo tệp máy chủ ảo của bạn.

Bắt đầu bằng cách tạo một tệp 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 đây và thay đổi tên miền your_domain thành tên miền 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>

Điều này sẽ cho biết cho Apache nơi tìm thư mục gốc chứa các tài liệu web có thể truy cập công khai. Nó cũng cho biết cho Apache nơi lưu trữ các nhật ký lỗi và yêu cầu cho trang web cụ thể này.

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

Bây giờ bạn đã tạo các tệp máy chủ ảo, bạn sẽ kích hoạt chúng để Apache biết phục vụ chúng cho 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 máy chủ ảo trong thư mục sites-enabled:

sudo ln -s /etc/httpd/sites-available/your_domain.conf /etc/httpd/sites-enabled/your_domain.conf

Máy chủ ảo của bạn hiện đã được định 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 chính xác dành cho máy chủ ảo của bạn.

Bước 5: Điều chỉnh SELim Permissions cho máy chủ ảo (Tùy chọn)

SELinux được cấu hình để hoạt động với cấu hình Apache mặc định. Vì bạn thiết lập thư mục nhật ký tùy chỉnh trong tệp cấu hình máy chủ ảo nên bạn sẽ gặp lỗi nếu cố gắng khởi động dịch vụ Apache. Để giải quyết vấn đề 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 cần thiết. SELinux mang lại khả năng bảo mật nâng cao cho môi trường CentOS 7 của bạn, do đó không nên tắt hoàn toàn mô-đun hạt nhân.

Có nhiều cách khác nhau để thiết lập chính sách dựa trên nhu cầu của môi trường, vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của mình. Bước này sẽ bao gồm hai phương pháp điều chỉnh chính sách Apache: phổ biến và trên một thư mục cụ thể. Việc điều chỉnh các chính sách trên thư mục sẽ an toàn hơn và do đó đây là phương pháp được khuyến nghị.

Điều chỉnh chính sách Apache trên toàn cầu

Đặt chính sách Apache toàn cầu sẽ cho SELinux biết xử lý tất cả các tiến trình Apache một cách giống nhau bằng cách sử dụng boolean httpd_unified. Mặc dù cách tiếp cận này tiện lợi hơn, nó sẽ không đưa ra cùng mức kiểm soát như cách tiếp cận tập trung vào chính sách tệp hoặc thư mục.

Chạy lệnh sau để đặt chính sách Apache toàn cầu:

sudo setsebool -P httpd_unified 1

Lệnh setsebool thay đổi giá trị boolean SELinux. Cờ -P sẽ cập nhật giá trị khởi động, làm cho thay đổi này tồn tại qua các lần khởi động lại. httpd_unified là boolean sẽ cho SELinux biết xử lý tất cả các tiến trình Apache cùng 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 trên một thư mục

Đặt quyền SELinux cho thư mục /var/www/your_domain/log theo cách riêng biệt sẽ mang lại cho bạn nhiều kiểm soát hơn về chính sách Apache, nhưng cũng có thể đòi hỏi nhiều công việc bảo trì hơn. Vì tùy chọn này không đặt chính sách theo cách toàn cầu, bạn sẽ cần thiết đặt thủ công loại ngữ cảnh cho bất kỳ thư mục nhật ký mới nào được chỉ định trong cấu hình máy chủ ảo của bạn.

Đầu tiên, kiểm tra loại 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, cho biết với SELinux rằng quy trình Apache chỉ có thể đọc các tệp được tạo trong thư mục này. Trong hướng dẫn này, bạn sẽ thay đổi loại ngữ cảnh của thư mục /var/www/your_domain/log thành httpd_log_t. Loại này sẽ cho phép Apache tạo và ghi thêm vào các tệp nhật ký ứ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 này và làm cho chúng tồn tại qua các lần khởi động lại:

sudo restorecon -R -v /var/www/your_domain/log

Cờ -R chạy lệnh này đệ quy, có nghĩa là nó sẽ cập nhật bất kỳ tệp tồn tại nào để sử dụng ngữ cảnh mới. Cờ -v sẽ in ra các thay đổi về ngữ cảnh mà lệnh đã thực hiện. Bạn sẽ thấy đầu ra sau đây 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ê các ngữ cảnh một lần nữa để xem các thay đổi: 

sudo ls -dZ /var/www/your_domain/log/

Đầu ra phản ánh loại ngữ cảnh đã được cập nhật:

Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/your_domain/log

Bây giờ thư mục /var/www/your_domain/log đã sử dụng loại ngữ cảnh httpd_log_t, bạn đã sẵn sàng để kiểm tra cấu hình máy chủ ảo của bạn.

Bước 6: Kiểm tra máy chủ ảo (Tùy chọn) 

Sau khi ngữ cảnh SELinux đã được cập nhật bằng cách sử dụng một trong hai phương pháp, Apache sẽ có khả năng ghi vào thư mục /var/www/your_domain/log. Bây giờ bạn có thể khởi động lại dịch vụ Apache một cách thành công: 

sudo systemctl restart httpd

Liệt kê nội dung của thư mục /var/www/your_domain/log để xem xem Apache đã tạo các tệp nhật ký chưa: 

ls -lZ /var/www/your_domain/log

Bạn sẽ thấy rằng Apache đã có thể tạo các tệp error.logrequests.log được chỉ định trong cấu hình máy chủ ảo:

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

Bây giờ bạn đã thiết lập máy chủ ảo của mình 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 http://your_domain, nơi bạn nên thấy một cái gì đó giống như thế này:

install apache webserver centos 7

Điều này xác nhận rằng máy chủ ảo 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 máy chủ ảo mới với quyền SELinux cho các tên miền bổ sung.

Phần kết luận install Apache trên CentOS 7

Trong hướng dẫn này, bạn đã install và quản lý máy chủ web Apache trên CentOS 7. 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 ra một trải nghiệm phong phú hơn.

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

Mọi người cũng tìm kiếm: httpd centos 7, apache centos 7, apache centos, install httpd centos 7, yum install apache2