Cài đặt Webserver Apache trên CentOS 7
Server Apache HTTP là web server đượ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, hỗ trợ phương tiện truyền thông 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. Hướng dẫn này sẽ cài đặt web server Apache với các VirtualHost trên server CentOS 7.Yêu cầu
Bạn cần các thành phần sau để hoàn thành hướng dẫn này:
- User không phải root có quyền sudo được cấu hình trên server, hãy cài đặt theo hướng dẫn cài đặt server ban đầu cho CentOS 7 .
- Firewall cơ bản được cấu hình theo hướng dẫn Các bước đề xuất cho Server CentOS 7 mới .
Bước 1 - Cài đặt Apache
Apache có sẵn trong repository mặc định của CentOS, nghĩa là bạn có thể cài đặt nó bằng trình quản lý gói yum
.
Cập nhật index gói Apache httpd
local để có các thay đổi mới nhất:
- sudo yum update httpd
Sau 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.
Nếu bạn đã hoàn thành hướng dẫn Các bước được đề xuất bổ sung cho Server CentOS 7 được đề cập trong phần yêu cầu, bạn sẽ cài đặt firewalld
trên server và bạn cần mở cổng 80
để cho phép Apache chạy các truy cập qua HTTP. Nếu chưa làm như vậy, bạn có thể thực hiện việc này bằng cách kích hoạt dịch vụ http
của firewalld
bằng lệnh sau:
- sudo firewall-cmd --permanent --add-service=http
Nếu bạn cấu hình Apache để cho truy cập qua HTTPS, bạn cũng 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, cập nhật firewall để các rule (luật) mới này có hiệu lực:
- sudo firewall-cmd --reload
Sau khi firewall cập nhật mới, bạn đã sẵn sàng khởi động dịch vụ và kiểm tra web server.
Bước 2 - Kiểm tra Server Web của bạn
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 cần khởi động 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:
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 thấy từ kết quả này, dịch vụ có vẻ chạy thành công. Tuy nhiên, cách tốt nhất để kiểm tra là 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 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 server, bạn có thể tìm bằng một số cách nhau từ dòng lệnh.
Nhập điều này vào dấu nhắc lệnh của server:
- hostname -I
Lệnh này sẽ hiển thị tất cả các địa server. Bạn có thể thử từng cái trong trình duyệt web.
Ngoài ra, bạn có thể sử dụng curl
:
- curl -4 icanhazip.com
Sẽ cho ra kết quả IP.
Khi bạn có địa chỉ IP của server, 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 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 file Apache và vị trí folder. Bây giờ dịch vụ đã được cài đặt và đang 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ý Apache
Đến đây bạn đã cài đặt và chạy web server, hãy xem qua một số lệnh quản lý cơ bản.
Để dừng web server, hãy nhập:
- sudo systemctl stop httpd
Để khởi động web server khi nó bị dừng, hãy nhập:
- sudo systemctl start httpd
Để dừng và sau đó bắt đầu lại dịch vụ, hãy nhập:
- sudo systemctl restart httpd
Nếu bạn chỉ đơn giản là thay đổi cấu hình, Apache 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 httpd
Theo mặc định, Apache được cấu hình để khởi động tự động khi server khởi động. Nếu bạn không muốn vậy, hãy tắt bằng lệnh:
- sudo systemctl disable httpd
Để cho phép dịch vụ khởi động khi server khởi động, hãy nhập:
- sudo systemctl enable httpd
Apache bây giờ sẽ tự động khởi động khi server khởi động lại.
Cấu hình mặc định cho Apache sẽ cho phép server lưu trữ một trang web duy nhất. Nếu bạn định lưu trữ nhiều domain trên server, bạn cần phải cấu hình các VirtualHost trên web server Apache.
Bước 4 - Cài đặt VirtualHost (Khuyến nghị)
Khi sử dụng web server Apache, bạn có thể sử dụng VirtualHost (tương tự như server block 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 server. Trong bước này, bạn sẽ cài đặt một domain có tên là example.com
, nhưng bạn nên thay thế domain này bằng domain của riêng bạn.
Apache trên CentOS 7 có một server block được kích hoạt theo mặc định được cấu hình để cung cấp tài liệu từ folder /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
, bạn sẽ tạo cấu trúc folder trong /var/www
cho trang web example.com
, giữ nguyên /var/www/html
làm folder mặc định.
Tạo folder html
cho example.com
như sau:
- sudo mkdir -p /var/www/example.com/html
Tạo một folder bổ sung để lưu trữ các file log cho trang web:
- sudo mkdir -p /var/www/example.com/log
Tiếp theo, chỉ định quyền sở hữu folder html
với biến môi trường $USER
:
- sudo chown -R $USER:$USER /var/www/example.com/html
Đảm bảo root web của bạn có các quyền mặc định được đặt:
- 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/example.com/html/index.html
Nhấn i
để chuyển sang chế độ INSERT
và thêm HTML mẫu sau vào file:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>
Lưu file bằng cách nhấn ESC
, nhập :wq
và nhấn ENTER
.
Bạn sẵn sàng để tạo file VirtualHost. Các file VirtualHost sẽ cấu hình các trang web riêng và cho web server Apache biết cách phản hồi các yêu cầu domain khác nhau.
Trước khi tạo VirtualHost, bạn cần tạo một folder sites-available
để lưu trữ chúng. Bạn cũng cần tạo folder sites-enabled
để thông báo cho Apache rằng VirtualHost đã sẵn sàng phục vụ truy cập. Folder sites-enabled
sẽ chứa các liên kết mềm (softlink) đến các VirtualHost mà ta muốn chạy. Tạo cả hai folder bằng lệnh sau:
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Tiếp theo, bạn sẽ yêu cầu Apache tìm kiếm các VirtualHost trong folder sites-enabled
. Để thực hiện điều này, hãy chỉnh sửa file cấu hình chính của Apache và thêm một dòng khai báo folder tùy chọn cho các file cấu hình bổ sung:
- sudo vi /etc/httpd/conf/httpd.conf
Thêm dòng này vào cuối file:
IncludeOptional sites-enabled/*.conf
Lưu file khi bạn hoàn tất việc thêm dòng đó. Đến đây bạn đã có các folder VirtualHost, bạn sẽ tạo file VirtualHost của bạn.
Bắt đầu bằng cách tạo một file mới trong folder sites-available
trên sites-available
:
- sudo vi /etc/httpd/sites-available/example.com.conf
Thêm vào khối cấu hình sau và thay đổi domain example.com
domain của bạn:
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/html ErrorLog /var/www/example.com/log/error.log CustomLog /var/www/example.com/log/requests.log combined </VirtualHost>
Thao tác này sẽ cho Apache biết nơi tìm trực tiếp root chứa các tài liệu web có thể truy cập. Nó cũng cho Apache biết nơi lưu trữ lỗi và log cho trang web cụ thể này.
Lưu file khi bạn hoàn tất.
Đến đây bạn đã tạo các file VirtualHost, bạn sẽ kích hoạt chúng để Apache biết để chạy. Để thực hiện việc này, hãy tạo một liên kết mềm (softlink) cho từng VirtualHost trong folder sites-enabled
:
- sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
VirtualHost của bạn hiện đã được cấu hình và sẵn sàng cung cấp nội dung. Trước khi khởi động lại dịch vụ Apache, hãy đảm bảo SELinux có các policy (chính-sách) phù hợp cho các VirtualHost của bạn.
Bước 5 - Điều chỉnh quyền SELinux cho VirtualHost (Được khuyến khích)
Nếu bạn đang cho phép SELinux thì cần cấu hình nó. Nếu không, bạn có thể bỏ qua bước 5 này!
SELinux được cấu hình để hoạt động với cấu hình Apache mặc định. Vì bạn đã cài đặt folder log tùy chỉnh trong file cấu hình VirtualHost, bạn sẽ gặp lỗi nếu 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 policy (chính-sách) của SELinux để cho phép Apache ghi vào các file cần thiết. SELinux mang lại khả năng bảo mật cao hơn cho môi trường CentOS 7 của bạn, do đó, bạn không nên tắt hoàn toàn module kernel.
Có nhiều cách khác nhau để cài đặt policy (chính-sách) dựa trên yêu cầu môi trường, vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của bạn. Bước này sẽ bao gồm hai phương pháp điều chỉnh các policy (chính-sách) của Apache: trên phạm vi global và trên một folder cụ thể. Điều chỉnh các policy (chính-sách) trên folder là an toàn hơn và do đó là cách tiếp cận được khuyến khích.
Điều chỉnh policy (chính-sách) Apache phổ biến
Việc đặt policy (chính-sách) Apache trên phạm vi global sẽ yêu cầu SELinux xử lý tất cả các tiến trình Apache giống hệt nhau bằng cách sử dụng boolean httpd_unified
. Mặc dù cách tiếp cận này thuận tiện hơn, nhưng nó sẽ không cung cấp cho bạn mức độ kiểm soát giống như cách tiếp cận tập trung vào policy (chính-sách) file hoặc folder.
Chạy lệnh sau để đặt policy (chính-sách) Apache chung:
- 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ị thời gian khởi động, làm cho thay đổi này vẫn tồn tại qua các lần khởi động lại. httpd_unified
là boolean sẽ yêu cầu SELinux xử lý tất cả các tiến trình Apache là cùng một loại, vì vậy bạn đã bật nó với giá trị 1
.
Điều chỉnh policy (chính-sách) Apache trên một folder
Việc đặt riêng các quyền SELinux cho folder /var/www/ example.com /log
sẽ cho phép bạn kiểm soát nhiều hơn các policy (chính-sách) Apache của bạn, nhưng cũng có thể yêu cầu bảo trì nhiều hơn. Vì tùy chọn này không phải là cài đặt policy (chính-sách) trên phạm vi global, bạn cần phải đặt loại ngữ cảnh theo cách thủ công cho bất kỳ folder log mới nào được chỉ định trong cấu hình VirtualHost của bạn.
Đầu tiên, hãy kiểm tra kiểu ngữ cảnh mà SELinux đã cung cấp cho folder /var/www/ example.com /log
:
- sudo ls -dZ /var/www/example.com/log/
Lệnh này liệt kê và đưa ra ngữ cảnh SELinux của folder. Bạn sẽ thấy kết quả giống như sau:
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/
Bối cảnh hiện tại là httpd_sys_content_t
, cho SELinux biết rằng tiến trình Apache chỉ có thể đọc các file được tạo trong folder này. Trong hướng dẫn này, bạn sẽ thay đổi kiểu ngữ cảnh của folder /var/www/example.com/log
thành httpd_log_t
. Loại này sẽ cho phép Apache tạo và nối vào file log ứng dụng web:
- sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
Tiếp theo, sử dụng lệnh restorecon
để áp dụng các thay đổi này và để chúng tồn tại khi khởi động lại:
- sudo restorecon -R -v /var/www/example.com/log
Cờ -R
chạy lệnh này một cách đệ quy, nghĩa là nó sẽ cập nhật mọi file hiện có để sử dụng ngữ cảnh mới. Cờ -v
sẽ in ra các thay đổi ngữ cảnh mà lệnh được thực hiện. Bạn sẽ thấy kết quả sau xác nhận các thay đổi:
restorecon reset /var/www/example.com/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 bối cảnh để xem các thay đổi:
- sudo ls -dZ /var/www/example.com/log/
Kết quả phản ánh loại ngữ cảnh được cập nhật:
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log
Bây giờ folder /var/www/ example.com /log
đang sử dụng loại httpd_log_t
, bạn đã sẵn sàng để kiểm tra cấu hình VirtualHost của bạn.
Bước 6 - Kiểm tra VirtualHost (Được khuyến khích)
Khi ngữ cảnh SELinux đã được cập nhật bằng một trong hai phương pháp, Apache sẽ có thể ghi vào folder /var/www/ example.com /log
. Đến đây bạn có thể khởi động lại thành công dịch vụ Apache:
- sudo systemctl restart httpd
Liệt kê nội dung của folder /var/www/ example.com /log
để xem Apache có tạo các file log hay không:
- ls -lZ /var/www/example.com/log
Bạn sẽ thấy rằng Apache đã có thể tạo ra các error.log
và requests.log
file quy định trong cấu hình VirtualHost:
-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
Đến đây bạn đã cài đặt VirtualHost và các quyền SELinux được cập nhật, Apache bây giờ sẽ cho truy cập domain của bạn. Bạn có thể kiểm tra bằng cách chuyển đến http:// example.com
, nơi bạn sẽ thấy thông tin như sau:
Điều này xác nhận VirtualHost của bạn đã được cấu hình thành công. Lặp lại các bước 4 và 5 để tạo VirtualHost mới với quyền SELinux cho các domain bổ sung.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt và quản lý web server Apache. Đến đây bạn có nhiều tùy chọn cho loại nội dung và các công nghệ có thể sử dụng để tạo ra trải nghiệm phong phú.
Nếu bạn muốn xây dựng một ứng dụng hoàn chỉnh hơn, có thể xem bài viết về cách cấu hình LAMP trên CentOS 7 .
Các tin trước
So sánh SQLite , MySQL , PostgreSQL 2019-03-19
Cài đặt và sử dụng Docker trên Ubuntu 16 2018-10-19
Cài đặt và sử dụng Composer trên Ubuntu 18.04 2018-10-16
Cài đặt WordPress với LAMP trên Ubuntu 18.04 2018-07-06
Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04 2018-07-06
Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05
Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05
Cài đặt Firewall với UFW trên Ubuntu 18.04 2018-07-05
Cài đặt MongoDB trên Ubuntu 18.04 2018-06-07
Cài đặt OpenVPN Server trên Ubuntu 18.04 2018-05-24