June 3, 2015

VPS căn bản [Phần 7] – Cài đặt Apache Webserver

Apache là một Webserver rất phổ biến hiện nay, bạn cứ tưởng tượng là các gói Shared Host có sử dụng cPanel X đa phần đều dùng Apache hết. Do nó phổ biến và dễ cấu hình hơn nên mình sẽ hướng dẫn cho bạn thực hành, chứ để tối ưu nhất thì sẽ sử dụng NGINX Webserver nhưng mình không nói tới ở các bài đầu tiên.

I. Webserver là gì?

Webserver là một dịch vụ (service) hỗ trợ bạn hiển thị dữ liệu trên VPS đến người dùng thông qua cổng mặc định là 80. Một webserver có thể tạo ra nhiều VirtualHost, và mỗi VirtualHost có thể mang 1 IP và 1 domain khác nhau.
Nói dễ hiểu hơn, VirtualHost chính là cách mà bạn thêm 1 domain khác vào VPS để chạy web trên đó.

II. Cách cài đặt Apache Webserver

Trước khi cài, mình xin nhắc lại là bạn nên cài trên CentOS 6.5 nếu bạn làm theo hướng dẫn này, CentOS 7.0 đã thay đổi rất nhiều nên mình sẽ có 1 tutorial riêng cho nó.
Hãy đăng nhập vào SSH và tiến hành tắt SELinux đi bằng cách mở file /etc/sysconfig/selinux và tìm SELINUX= rồi sửa thành như dưới đây:
01
SELINUX=disabled
Sau đó gõ lệnh reboot để khởi động lại máy chủ.
Đăng nhập lại SSH và bắt đầu cài Apache với lệnh yum với hành động là install và cài phần mềm tên là làhttpd. Đây nghĩa là phần mềm webserver Apache.
01
sudo yum install httpd
Nếu nó hỏi như thế này thì ấn y rồi enter nhé.
01
02
03
Total download size: 1.1 M
Installed size: 3.4 M
Is this ok [y/N]:
Sau khi nó hiện ra chữ Complete! tức là đã cài thành công.
Tiêp theo là tiến hành khởi động service httpd mà mình vừa cài đặt.
01
sudo service httpd start
nếu nó có hiện “httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName” thì kệ nó, chẳng qua là do bạn chưa trỏ IP về hostname thôi. Ở cuối bài mình có chỉ bạn cách đổi ServerName để nó khỏi báo nữa.
Một vài nhà cung cấp có thể sẽ chặn cổng 80 ở mặc định, bạn có thể nhập thêm 3 lệnh sau để mở cổng 80 ra nếu bị khóa:
01
02
03
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart
Bây giờ bạn hãy thử truy cập vào website với địa chỉ là IP của VPS xem, nếu nó hiện ra trang Welcome của Apache là thành công.
cai-apache-webserver-finish-2
Nhưng có một vấn đề là các service bạn cài vào sẽ không tự động khởi động nếu bạn reboot lại VPS, nên bạn sẽ cần gõ thêm lệnh này để đưa service httpd vào danh sách tự động khởi động khi reboot.
01
sudo chkconfig httpd on
Mặc định các dữ liệu hiển thị ra website sẽ nằm ở thư mục /var/www. Bạn có thể truy cập vào đó để upload file bất kỳ lên rồi truy cập bằng đường dẫn là IP VPS của bạn.

Bật mod_rewrite

Để sử dụng tính năng Permalink trong WordPress cũng như các chức năng rewrite đường dẫn khác, hãy mở file /etc/httpd/conf/httpd.conf và tìm:
01
02
03
04
05
06
07
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Thay đoạn AllowOverride None trong đó thành AllowOverride All.
Cuối cùng là gõ service httpd restart để khởi động lại Apache.

III. Cách tạo VirtualHost cho Apache

Bạn làm lại bước này nếu cần thêm một domain khác vào VPS.
Ở trên chỉ là bước cài Apache và mình không khuyến khích bạn sử dụng thư mục /var/www để upload website lên, mà hãy tạo ra một thư mục mới theo ý của bạn rồi thêm domain cần sử dụng cho thư mục đó, cái này chúng ta sẽ gọi là VirtualHost (Host ảo).
Để tạo VirtualHost, thì việc đầu tiên là bạn cần phải tạo một thư mục public_html (hoặc bạn cũng có thể ghi là www tùy bạn) trong một thư mục nào đó, ở đây mình khuyến khích các bạn đặt trong /home/webdata/tên-example.com. Chúng ta tiến hành tạo thư mục với lệnh sau:
01
sudo mkdir -p /home/webdata/thachpham.dev/public_html
Các bạn nhớ thay thachpham.dev thành domain mà bạn muốn thêm vào VPS, tham số -p ở đây nghĩa là bạn ép nó tự tạo ra đoạn thư mục trên nếu nó chưa có. Chẳng hạn trong thư mục /home của mình chưa cówebdata/ nên chúng ta sẽ sử dụng tham số -p để ép nó tạo ra thư mục webdata/.
Bạn có thể kiểm tra xem nó đã tạo thành công chưa bằng lệnh ls -a /home.
Tiếp theo là chúng ta sẽ cho user apache và group apache sở hữu thư mục này bởi vì thư mục này đang thuộc quyền sở hữu của user mà bạn tiến hành tạo, thay vì CHMOD cho an toàn hơn.
01
sudo chown -R apache:apache /home/webdata/thachpham.dev
Nếu bạn không cấp quyền thư mục này cho user apache thì khi cài WordPress, nó không thể tự động sửa file (chẳng hạn như tự thêm nội dung vào file .htaccess khi cài plugin) và nó sẽ bắt bạn nhập tài khoản FTP khi cài Plugin/Theme.
Bạn có thể kiểm tra quyền sở hữu của thư mục này với lệnh:
01
ls -al /home/webdata/thachpham.dev
Kế tiếp là hãy tạo một file index.html trong thư mục /home/webdata/thachpham.dev/public_html để chút nữa ta sẽ kiểm tra, với nội dung như sau:
01
sudo vi /home/webdata/thachpham.dev/public_html/index.html
01
02
03
04
05
06
07
08
<html>
  <head>
    <title>Welcome</title>
  </head>
  <body>
    <h1>Ban da cai VirtualHost thanh cong!</h1>
  </body>
</html>
Kế tiếp, hãy mở file /etc/httpd/conf/httpd.conf và tìm đoạn dưới đây rồi xóa dấu # đi (bước này chỉ làm 1 lần, lần thêm domain sau khỏi cần làm).
01
#NameVirtualHost *:80
Đoạn này nằm gần cuối file.
Sau đó bạn vào thư mục /etc/httpd/conf.d và tạo thêm một file .conf tên bất kỳ. Ví dụ mình muốn thêm domain thachpham.dev vào VPS thì sẽ tạo file tên là thachpham.dev.conf cho dễ phân biệt. Trong nội dung, mình chèn đoạn sau vào:
<VirtualHost *:80>
ServerAdmin contact@thachpham.com
DocumentRoot /home/webdata/thachpham.dev/public_html
ServerName www.thachpham.dev
ServerAlias thachpham.dev
ErrorLog logs/thachpham.dev-error_log
</VirtualHost>
Mình xin giải thích các thông số ở đoạn trên như sau:
  • VirtualHost *:80 – Nghĩa là cái domain này sẽ sử dụng port 80, bạn thiết lập giống với port của Apache nhé.
  • ServerAdmin – Email của người quản trị.
  • DocumentRoot – Thư mục gốc của domain này, chúng ta đã tạo ra nó ở đầu bài.
  • ServerName – domain của VirtualHost.
  • ServerAlias – Thêm tùy chọn để truy cập vào domain không cần www.
  • ErrorLog – Đường dẫn file log báo lỗi webserver của domain này. Bạn có thể bỏ dấu # để dùng chức năng này nhằm theo dõi lỗi, và nhớ tạo 1 file riêng để nó lưu lại lỗi rồi nhập đường dẫn của file log đó vào.
Trường hợp VPS bạn có nhiều IP và bạn muốn VirtualHost này sử dụng 1 IP riêng thì thêm đoạnListen 123.456.789 ở ngay trên ServerAdmin.
Sau này bạn muốn thêm nhiều VirtualHost thì cứ copy cái đoạn trên rồi sửa lại thôi là được. Bây giờ chúng ta Save file và thoát ra.
Ok, hãy khởi động lại Apache để nó cập nhật thay đổi nhé.
01
sudo service httpd restart
01
02
Stopping httpd: [FAILED]
Starting httpd: [OK ]
Phần stopping nó bị FAILED thì kệ nó, chẳng qua là do chúng ta restart bất chợt thôi, gõ restart lại lần nữa là hết.
Cuối cùng là hãy trỏ domain về IP của VPS hoặc IP mà bạn đã thiết lập cho VirtualHost nhé, nếu truy cập vào domain đó mà nó ra file Welcome mà chúng ta đã tạo ở trên thì thành công.
apache-virtualhost-success

Hỏi/Đáp khi tạo VirtualHost

Tại sao tôi thêm 2 domain vào nhưng cả 2 lại trỏ về 1 domain?
Lý do là bạn chưa tiến hành gõ lệnh chown -R apache:apache /home/webdata/example.com/ cho cả 2 hoặc chỉ gõ cho 1 domain. Tốt nhất mỗi khi thêm 1 domain vào, hãy gõ lệnh chown -R apache:apache /home/webdata.
Khi thêm domain vào, tôi trỏ domain về VPS thế nào?
Hãy trỏ bằng cách sử dụng các dịch vụ quản lý DNS trung gian như CloudFlare hoặc trình quản lý các record DNS của nhà cung cấp domain rồi trỏ record A về IP của VPS.

Tối ưu Apache để tiết kiệm CPU

Mặc định có thể bạn sẽ thấy Apache nó “ăn” hơi bị nhiều CPU do sử dụng quá nhiều process. Để thiết lập lại số lượng processes mà Apache được phép tạo ra, hãy mở file /etc/httpd/conf/httpd.conf lên và tìm đoạn:
01
02
03
04
05
06
07
08
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
Ở đoạn trên, bạn sửa lại các phần thành những giá trị sau:
  • StartServers : 1
  • MinSpareServers : 1
  • MaxSpareServers : 5
  • MaxRequestsPerChild : 10000
Sau này nếu cần thêm VirtualHost, bạn chỉ cần copy file thachpham.dev.conf kia, đổi tên thành domain cần thêm cũng như sửa file để thay thachpham.dev thành domain mới của bạn.

Lời kết

Trong bài này chúng ta đã tìm hiểu qua cách cài Apache Webserver và thiết lập VirtualHost cho nó. Đây là bước quan trọng mà bạn có thể cần làm đi làm lại nhiều lần cho nhuần nhuyễn để có thể chủ động hơn về sau.
Tuy nhiên hiện tại bạn chưa chạy được WordPress đâu bởi vì chúng ta còn thiếu ứng dụng PHP và MySQL, chúng ta sẽ cài ở các bài sau.

0 comments:

Post a Comment