Apache HTTP là một trong những web server được sử dụng rộng rãi nhất trên thế giới. Trong bài viết này sẽ hướng dẫn cách cài đặt web server trên CentOS 7 cách đơn giản nhất.
Giới thiệu về máy chủ Apache
Máy chủ Apache HTTP cung cấp nhiều tính năng mạnh mẽ bao gồm các module có thể load dynamic, 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.
Trong hướng dẫn này, bạn sẽ cài đặt một web Apache server với các virtual host trên server CentOS 7 của mình.
Điều kiện tiên quyết để cài đặt web server trên CentOS 7
Bạn sẽ cần những điều sau để hoàn thành hướng dẫn này:
- Non-root user có quyền sudo được cấu hình trên server của bạn.
- Tường lửa cơ bản được cấu hình bằng cách làm theo hướng dẫn. Các bước được đề xuất sẽ bổ sung cho máy chủ CentOS 7 mới.
Nếu bạn chưa có máy chủ riêng của mình hoặc đang tìm kiếm giải pháp cho thuê máy chủ có chi phí hợp lý, thì Vietnix VPS có thể là lựa chọn phù hợp cho bạn. Với Vietnix VPS, bạn sẽ có thể sử dụng các dịch vụ chất lượng cao mà không cần phải đầu tư quá nhiều chi phí. Hiện tại, Vietnix cung cấp nhiều gói dịch vụ khác nhau như VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp, VPS NVMe, VPS GPU, giúp bạn dễ dàng tùy chỉnh và lựa chọn gói dịch vụ phù hợp nhất với nhu cầu sử dụng của mình. Hơn nữa, đội ngũ hỗ trợ kỹ thuật chuyên nghiệp 24/7 sẽ giúp bạn giải quyết mọi vấn đề một cách nhanh chóng và hiệu quả. Liên hệ với đội ngũ Vietnix để được tư vấn chi tiết nhất.
Bước 1 – Cài đặt Apache
Apache có sẵn trong kho phần mềm của CentOS 7. Nghĩa là có thể cài đặt nó bằng yum
package manager.
Tiếp theo, hãy cập nhật httpd
package index cục bộ để nhận những thay đổi mới nhất:
sudo yum update httpd
Tiếp theo là cài đặt các gói:
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 dependencies bắt buộc.
Sau đó, bạn sẽ cài đặt firewalld
trên server mình và cần mở cổng 80 để Apache phục vụ các request qua HTTP. Cụ thể, hãy bật dịch vụ http
của firewalld
bằng lệnh sau:
sudo firewall-cmd --permanent --add-service=http
Nếu bạn định cấu hình Apache để phục vụ nội dung HTTPs thì sẽ 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 này có hiệu lực:
sudo firewall-cmd --reload
Sau đó, khởi động và kiểm tra lại web server của bạn.
Bước 2 – Kiểm tra máy chủ Web
Apache không tự động khởi động trên CentOS sau khi hoàn tất quá trình cài đặt. Vì vậy, nó cần được khởi động theo cách thủ công để có thể tiếp tụ c cài đặt web server trên CentOS 7:
sudo systemctl start httpd
Xác minh rằng 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ừ output này, đã bắt đầu có sự tiến triển tốt. Tuy nhiên, cách tốt nhất để kiểm tra là request một trang từ Apache.
Bạn có thể truy cập trang đích Apache để xác nhận phần mềm đang chạy thông qua địa chỉ IP của bạn. Nếu không biết địa chỉ IP của máy, hãy dùng các lệnh sau:
Nhập lệnh này vào command prompt của server:
hostname -I
Lệnh này sẽ hiển thị tất cả các địa chỉ mạng của host, được phân tách bằng dấu cách. Bạn có thể thử từng cái trong trình duyệt web để xem chúng có hoạt động không.
Ngoài ra còn có thể sử dụng curl
để yêu cầu IP của mình từ icanhazip.com
. Địa chỉ này sẽ cung cấp cho bạn địa chỉ IPv4 public:
curl -4 icanhazip.com
Khi đã có địa chỉ IP của máy chủ, hãy nhập nó 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 chỉ ra rằng Apache đang hoạt động một cách chính xác. Bao cũng gồm cả 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ý process Apache
Bước tiếp theo trong việc cài đặt web server trên CentOS 7 là thiết lập quy trình và chạy web server. Sau đây là một số lệnh quản lý cơ bản:
Để dừng máy chủ web của bạn, hãy nhập:
sudo systemctl stop httpd
Khởi động máy chủ web khi nó bị dừng:
sudo systemctl start httpd
Để dừng và bắt đầu lại dịch vụ:
sudo systemctl restart httpd
Nếu chỉ đơn giản là thay đổi cấu hình, Apache thường có thể tải lại mà không mất kết nối. Để làm điều này, hãy dùng lệnh sau:
sudo systemctl reload httpd
Theo mặc định, Apache được cấu hình để tự khởi động khi máy chủ khởi động. Nếu tắt nó thì hãy nhập lệnh sau:
sudo systemctl disable httpd
Để bật lại dịch vụ khởi động khi khởi động máy:
sudo systemctl enable httpd
Apache bây giờ sẽ tự khởi động khi server khởi động lại.
Cấu hình mặc định cho Apache sẽ cho phép server được host một trang web duy nhất. Nếu bạn muốn lưu trữ nhiều tên miền trên máy, bạn cần định lại cấu hình virtual host trên web server Apache.
Bước 4 – Thiết lập virtual server
Khi sử dụng máy chủ web Apache thì bạn có thể sử dụng virtual host để lưu trữ nhiều miền trên một máy. Trong bước này, bạn sẽ thiết lập một miền có tên là example.com
. Nhưng bạn nên thay thế miền này bằng tên miền của riêng bạn.
Cách thiết lập virtual server
Apache trên CentOS 7 có một block server được kích hoạt dể cung cấp tài liệu từ folder /var/www/html
. Mặc dù điều này tốt cho một trang web nhưng sẽ khó sử dụng nếu bạn host nhiều trang web. Thay vì sửa đổi /var/www/html
, bạn sẽ tạo folder bên trong /var/www
cho trang web example.com
. Giữ nguyên /var/www/html
làm folder mặc định được phục vụ nếu request của client không phù hợp với trang nào.
Tạo folder virtual server
Tạo folder html cho example.com
như sau, sử dụng flag -p
để tạo folder cần thiết:
sudo mkdir -p /var/www/example.com/html
Lập một folder bổ sung để lưu trữ 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 $USER:
sudo chown -R $USER:$USER /var/www/example.com/html
Đảm bảo rằng web của bạn có 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:
sudo vi /var/www/example.com/html/index.html
Nhấn i
để chuyển sang chế độ INSERT
và thêm HTML mẫu vào file:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
Lưu và đóng file bằng cách nhấn ESC
, nhập :wq
và nhấn ENTER
.
Với directory web và file mẫu thì đủ để tạo virtual server. Các file virtual server chỉ định cấu hình của các trang web riêng biệt. Cho máy chủ web Apache biết cách phản hồi yêu cầu các tên miền khác nhau.
Trước khi tạo virtual server, cần tạo một directiry sites-available
để lưu trữ chúng. Ngoài ra, bạn cũng cần tạo một directory sites-enabled
. Directoiry này sẽ chứa các symbolic link cho các virual host mà ta muốn publish. Tạo cả hai directiry này bằng lệnh sau:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Tiếp theo, yêu cầu Apache tìm kiếm các virtual server trong directory 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. Sau đó thêm một dòng khai báo directory 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 và đóng file khi đã hoàn tất việc thêm dòng đó vào. Bây giờ các directory virtual server đã được tạo. Tiếp theo là tạo file virtual host.
Tạo file virtual host
Đầu tiên tạo một file mới trong directory sites-available:
sudo vi /etc/httpd/sites-available/example.com.conf
Thay đổi miền example.com
thành tên miền của bạn:
/etc/httpd/sites-available/example.com.conf
<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 root – lưu giữ các tài liệu web mà có thể được truy cập công khai. Ngoài ra, nói cũng cho biết nơi lưu trữ lỗi và request log cho trang web.
Lưu và đóng file khi hoàn tất.
Bây giờ đã tạo các file virtual host. Hãy kích hoạt chúng để Apache biết để phục vụ cho khách truy cập. Để làm việc này, hãy tạo một liên kết cho virtual host trong directory site-enabled
:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
Bây giờ, virtual host đã được cấu hình và sẵn sàng cung cấp nội dung. Trước khi khởi động lại Apache, hãy đảm bảo rằng SELinux có các chính sách phù hợp cho virtual host của bạn. Tiếp theo, hãy điều chỉnh quyền của SELinux để tiếp tục việc cài đặt web server trên CentOS 7.
Bước 5 – Điều chỉnh quyền SELinux cho virtual server
SELinux được cấu hình để hoạt động với Apache. Vì bạn đã thiết lập một custom log directory trong file config của virtual host. Nên có thể sẽ gặp lỗi nếu khởi động Apache. Để giải quyết vấn đề này, cần cập nhật các chính sách của SELinux. Điều này 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 môi trường CentOS 7. Do đó không nên tắt toàn bộ các module kernel.
Có nhiều cách khác nhau để đặt chính sách. Vì SELinux cho phép bạn tùy chỉnh mức độ bảo mật của mình. Có hai phương pháp điều chỉnh chính sách Apache: trên phạm vị toàn bộ và trên directory cụ thể. Điều chỉnh trên directory thì sẽ an toàn hơn. Do vậy nó là cách tiếp cận được khuyến nghị cho người dùng.
Điều chỉnh các chính sách Apache
Việc đặt chính sách Apache trên phạm vi rộng sẽ yêu cầu SELinux xử lý các quy trình 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, nhưng nó không cung cấp cho bạn mức độ kiểm soát giống như tiếp cận vào file hay directory.
Chạy lệnh sau để đặt một chính sách Apache chung:
sudo setsebool -P httpd_unified 1
Lệnh setsebool
thay đổi giá trị boolean của SELinux. Flag -P
sẽ cập nhật giá trị boot-time. Điều này làm các thay đổi vẫn giữ nguyên sau các lần khởi động lại. httpd_unified
là boolean yêu cầu SELinux xử lý tất cả các quy trình thuộc cùng một loại. Vì vậy hãy bật nó với giá trị là 1
.
Điều chỉnh chính sách Apache trên directory
Việc đặt riêng các quyền SELinux cho directory /var/www/example.com/log
sẽ cung cấp nhiều quyền kiểm soát hơn, nhưng cũng yêu cầu bảo trì nhiều hơn. Vì việc này khác với việc đặt chính sách chung, nên ta cần set các loại context một cách thủ công, cho từng log directory mới trong cấu hình của virtual host.
Đầu tiền kiểm tra context type mà SELinux đã cung cấp cho directory /var/www/example.com/log
:
sudo ls -dZ /var/www/example.com/log/
Lệnh này liệt kê và in cotext SELinux của directory. Bạn sẽ thấy output như sau:
Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/
Context hiện tại là httpd_sys_content_t.
Điều này cho SELinux biết Apache chỉ có thể đọc các file được tạo trong directory này. Trong hướng dẫn này, bạn sẽ thay đổi context type của directory /var/www/example.com/log
thành httpd_log_t.
Nó cho phép Apache tạo và nối các file log ứng dụng web lại với nhau:
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 qua các lần khởi động lại:
sudo restorecon -R -v /var/www/example.com/log
Flag -R
chạy lệnh theo quy tắc đệ quy. Nghĩa là nó sẽ cập nhật mọi file hiện có thể sử dụng context mới. Flag -v
sẽ in ra các thay đổi về context mà lệnh thực hiện. Kết quả:
Output
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
Hãy liệt kê các ngữ cách một lần nữa để xem các thay đổi:
sudo ls -dZ /var/www/example.com/log/
Output sẽ phản ánh các loại context được cập nhật:
Output
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log
Bây giờ directory /var/www/example.com/log
đang sử dụng loại httpd_log_t
. Hãy kiểm tra lại cấu hình virtual server của mình. Bước cuối cùng trong việc cài đặt web server trên CentOS 7 là kiểm tra lại virtual host.
Bước 6 – Kiểm tra Virtual Host
Khi SELinux context đã được cập nhật, Apache sẽ có thể ghi vào directory /var/www/example.com/log
. Bây giờ bạn có thể khởi động lại Apache:
sudo systemctl restart httpd
Liệt kê content của directory /var/www/example.com/log
để xem Apache có tạo các file hay không:
ls -lZ /var/www/example.com/log
Bạn sẽ thấy Apache có thể tạo file error.log
và request.log
, các file này đã đượ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
Bây giờ virtual host và các quyền SELinux đã được cập nhật. Apache sẽ phục vụ tên miền của bạn. Kiểm tra điều này bằng cách truy cập http://example.com
, bạn sẽ thấy một thứ như sau:
Điều này xác nhận virtual server đã được cấu hình thành công. Lặp lại bước 4 và 5 để tạo virtual host mới với quyền SELinux cho miền bổ sung. Sau đó kết thúc việc cài đặt web server trên CentOS 7.
Ngoài ra, bạn cũng nên tham khảo đến việc cài đặt MongoDB trên CentOS 7, bởi vì việc sử dụng MongoDB là một lựa chọn tốt cho các ứng dụng đòi hỏi tính nhất quán, khả năng mở rộng và hiệu suất cao, giúp ích cho bạn rất nhiều trong công việc.
Tổng kết
Trong bài viết này đã hướng dẫn bạn cách quản lý máy chủ web Apache và cài đặt web server trên CentOS 7. Bây giờ bạn đã có máy chủ web của mình. Bạn sẽ có nhiều tùy chọn với nhiều loại nội dung do bạn phân phối. Bạn có thể sử dụng các công nghệ tốt để tạo trải nghiệm phong phú hơn.
Xin chào, TÔi có cài đặt theo bài hướng dẫn, tuy nhiên website lại lỗi như hình đính kèm, xin hỏi cách fix như thế nào. Cảm ơn ad