Bài viết này mình tổng hợp lại một số cách để cài đặt webserver NGINX trên Centos, mình sẻ giới thiệu cách cài tự động trước, vì cách này nó nhanh, gọn chỉ một dòng lệnh đã làm được rất nhiều việc, thay vì bạn phải làm thủ công, phải đi cài đặt từng phần mềm, thì cách tự động sẻ giúp bạn cài đặt tất cả trong một dòng lệnh

CÁCH 1: CÀI ĐẶT TỰ ĐỘNG ( sử dụng tool hocvps hoặc vpssim)

Chúng ta có thể tận dụng lại tool hocvps của bác Luân Trần để cài đặt cho đỡ mất thời gian, hạn chế lỗi phát sinh. HocVPS Script là 1 bash script chạy trên SSH sẽ tự động cài đặt tất cả các thành phần cần thiết nhất cho VPS với một dòng lệnh duy nhất.
Không như những Control Panel khác, HocVPS Script không hề sử dụng bất kỳ tài nguyên server (CPU, RAM) và không thể mắc lỗi bảo mật nào để hacker khai thác được nên các bạn có thể hoàn toàn yên tâm sử dụng. Bên cạnh đó bạn có thể sử dụng tool VPSSIM nó cũng có chức năng tương tự như hocvps, mình sẻ có bài viết giới thiệu thêm về phần này.
Với việc cài đặt thông qua tool tự động này, webserver sẽ được tự động tối ưu cấu hình để đảm bảo có hiệu suất hoạt động tốt nhất, bảo mật nhất. Ngay cả những bạn mới làm quen với VPS cũng có thể quản lý VPS thông qua menu dòng lệnh đơn giản, gọi bằng lệnh hocvps

HocVPS Script sẽ tự động cài đặt:

  • Webserver Nginx bản mới nhất.
  • Database MariaDB bản mới nhất 10.0 (chính là MySQL được tối ưu).
  • PHP phiên bản mới nhất tùy chọn: PHP 7.1, PHP 7.0, PHP 5.6; đi kèm Zend OPcache
  • phpMyAdmin mới nhất.
  • eXtplorer mới nhất để quản lý File Manager, có thể tạo user, phân quyền riêng biệt.

Những tính năng đặc biệt:

  • Thông tin cài đặt đơn giản, chỉ cần lựa chọn phiên bản PHP, tên miền chính port admin là đủ.
  • Sử dụng Nginx repo thay vì compile từ source như những script khác giúp việc cài đặt Nginx nhanh hơn, sau này có nâng cấp cũng dễ dàng hơn rất nhiều.
  • Thay thế MySQL bằng MariaDB cho kịp xu hướng (đây là phiên bản cải tiến từ MySQL, hoạt động tương tự nhưng cho hiệu suất cao hơn MySQL; ngoài ra phiên bản mới nhất CentOS 7 chính thức đã hỗ trợ MariaDB).
  • Tương thích với cả CentOS 6 và 7, cả 32bit lẫn 64bit chơi hết.
  • Tùy chọn sử dụng cài đặt phiên bản PHP 7.1 (mới nhất), PHP 7.0, PHP 5.6.
  • Có trình quản lý File Manager eXtplorer trực tiếp ngay trên web.
  • Tự động cài đặt module Zend Opcache và có thể theo dõi status ngay trên web.
  • Sử dụng được với cả domain www và non-www, tự động redirect giúp bạn.
  • Update tự động cho Nginx, PHP, MariaDB.
  • Theo dõi tình trạng server ngay trên web, có thể sử dụng mobile truy cập mọi nơi.
  • Thay đổi port SSH mặc định từ 22 sang 2222 hạn chế SSH Brute Force Attack, kèm theo Fail2ban block IP ngay nếu phát hiện login sai 3 lần (áp dụng cả SSH và HocVPS Script Admin).
  • Toàn bộ thông tin quản lý sẽ được lưu trong file text ở /root/hocvps-script.txt
  • Tham khảo thêm tính năng mới trong Changelog.

Yêu cầu hệ thống:

  • RAM: tối thiểu 512MB
  • Nên tạo swap trước khi cài (nếu sử dụng ổ cứng SSD hoặc RAID10)

Bây giờ chúng ta bắt đầu tiền hành các bước cài đặt.

1. Cài đặt HocVPS Script

Đầu tiên các bạn cần chuẩn bị một VPS mới tinh bằng cách Reinstall hoặc Rebuild, sử dụng CentOS 6 hoặc 7, bản 32bit hoặc 64bit đều được. Nên sử dụng bản CentOS 7 64bit với PHP 7.1
Kết nối SSH sử dụng ZOC Terminal hoặc Putty với tài khoản root. Nếu tài khoản không có quyền root cần cấp quyền bằng cách chạy lệnh sudo su.

Chạy lệnh sau để tiến hành cài đặt:
curl -sO https://hocvps.com/install && bash install 

– Cài đặt xong, khi connect SSH VPS bạn hãy sử dụng port 2222, không dùng port 22!
Chuẩn bị quá trình cài đặt

Trong bước này bạn cần lựa chọn:

Phiên bản PHP muốn sử dụng: nên dùng PHP 7.1, có hiệu suất gấp 3 lần so với phiên bản cũ 5.6.
Tên miền chính sử dụng với VPS, có thể nhập có www hoặc không có www tùy mục đích sử dụng, script sẽ tự động redirect giúp bạn.

Port admin quản lý server: là port bí mật (nằm trong khoảng 2000 – 9999, thay đổi được sau khi cài) dùng để:

Truy cập link quản trị, có dạng: http//domain.com:port/
Sử dụng phpMyAdmin, link dạng: http://domain.com:port/phpmyadmin/
Quản lý File Manager, link dạng: http://domain.com:port/filemanager/
Theo dõi tình trạng hệ thống, link dạng: http://domain.com:port/serverinfo/
Theo dõi tình trạng Zend Opcache, link dạng: http://domain.com:port/op.php

Sau đó, bạn cứ để cho script tự động thực hiện quá trình cài đặt, có thể mất từ 3 – 5 phút tùy cấu hình và network của VPS/Server.
Cuối cùng, nếu không có vấn đề gì xảy ra, bạn sẽ nhận được thông báo cài đặt thành công và thông tin quản lý VPS như bên dưới. Đồng thời, thông tin này cũng sẽ được lưu trong file text có đường dẫn /root/hocvps-script.txt để bạn xem lại sau này.
Vậy là server sẵn sàng để bạn sử dụng rồi đấy.

2. Sử dụng HocVPS Script

HocVPS Menu được sử dụng qua lệnh

hocvps

Sau khi cài đặt xong HocVPS Script, bạn có thể sử dụng sFTP để quản lý File, upload code lên thư mục /home/domain.com/public_html/ đồng thời trỏ tên miền về IP VPS và bắt đầu sử dụng.
Lưu ý: Sau khi upload source lên thư mục web, các bạn sử dụng hocvps menu 14 Phân Quyền Webserver để Nginx đọc được nội dung website.
Nếu muốn kết nối SSH bạn hãy sử dụng port 2222.
Trong quá trình sử dụng, đang ở bất kỳ chức năng nào bạn cũng có thể nhấn Ctrl + C sẽ thoát khỏi Script ngay lập tức.
Bảo mật an toàn tuyệt đối
Mình luôn đặt vấn đề bảo mật và sự đơn giản lên hàng đầu nên từ phiên bản HocVPS Script v1.6 sẽ bổ sung thêm một lớp bảo mật nữa khi truy cập các link có chứa port. Bạn có thể thay đổi password này cho dễ nhớ hơn khi truy cập link quản trị http://domain.com:port/.
Username mặc định cho tất cả các tool là admin, password tự động sinh ra sau khi cài đặt xong server. Nếu bạn nhập sai thông tin quá 3 lần, IP sẽ tự động bị block trong 1h. Nâng thêm thời gian theo hướng dẫn này.
– Cloudflare CDN chặn truy cập qua port bất thường nên domain sử dụng CDN Cloudflare(đám mây vàng) cần tắt CDN để truy cập domain:port. Nếu không, chỉ truy cập qua ip:port
– Cài đặt xong HocVPS Script, các bạn nên thiết lập luôn Script backup tự động nhằm đảm bảo an toàn cho data và database.
– HocVPS Script hoạt động rất tốt với WordPress, Joomla, Magento, PrestaShop, Xenforo

CÁCH 2: CÀI ĐẶT THỦ CÔNG

– Nginx (đọc là Engine x) là một webserver nhỏ gọn, ít tốn RAM, mạnh mẽ và có hiệu suất hoạt động cao.
– PHP hỗ trợ các phiên bản 5.3, 5.4, 5.5, 5.6, 7.0
– MariaDB là phiên bản mã nguồn mở của MySQL, hoạt động giống hệt MySQL. Bắt đầu từ CentOS 7 mặc định đã bắt đầu hỗ trợ MariaDB, các bạn nên sử dụng thay cho MySQL ngay từ bây giờ.

I. Cài đặt Nginx và PHP trên CentOS 7/6.5/5.10

Đầu tiên bạn cần chuẩn bị một server CentOS mới tinh chưa cài gì cả. Kiểm tra lại xem hostname và file host đã chính xác chưa trước khi bắt đầu.
Các thao tác thực hiện bằng dòng lệnh, sử dụng tool ZOC Terminal và nano.

Bước 1. Thêm repo cần thiết

CentOS 7/6.5/5.10 EPEL repository
yum install epel-release
CentOS 7/6.5/5.10 Remi repository
## CentOS 7 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
## CentOS 6 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
## CentOS 5 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
CentOS 7/6.5/5.10 Nginx repository
## CentOS 7 ##
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
## CentOS 6 ##
rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
## CentOS 5 ##
rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm

Bước 2. Cài đặt Nginx, PHP

CentOS 7/6.5/5.10
## PHP 5.3 ##
yum install -y nginx php-fpm php-common
## PHP 5.4 ##
yum –enablerepo=remi install -y nginx php-fpm php-common
## PHP 5.5 ##
yum –enablerepo=remi,remi-php55 install -y nginx php-fpm php-common
## PHP 5.6 ##
yum –enablerepo=remi,remi-php56 install -y nginx php-fpm php-common
## PHP 7.0 ##
yum –enablerepo=remi,remi-php70 install -y nginx php-fpm php-common
## PHP 7.1 ##
yum –enablerepo=remi,remi-php71 install -y nginx php-fpm php-common

Bước 3. Cài đặt PHP module

Một số module PHP thông dụng:
OPcache (php-opcache) – The Zend OPcache provides faster PHP execution through opcode caching and optimization.
APCu (php-pecl-apc) – APCu userland caching
CLI (php-cli) – Command-line interface for PHP
PEAR (php-pear) – PHP Extension and Application Repository framework
PDO (php-pdo) – A database access abstraction module for PHP applications
MySQL (php-mysqlnd) – A module for PHP applications that use MySQL databases
PostgreSQL (php-pgsql) – A PostgreSQL database module for PHP
MongoDB (php-pecl-mongo) – PHP MongoDB database driver
SQLite (php-pecl-sqlite) – Extension for the SQLite Embeddable SQL Database Engine
Memcache (php-pecl-memcache) – Extension to work with the Memcached caching daemon
Memcached (php-pecl-memcached) – Extension to work with the Memcached caching daemon
GD (php-gd) – A module for PHP applications for using the gd graphics library
XML (php-xml) – A module for PHP applications which use XML
MBString (php-mbstring) – A module for PHP applications which need multi-byte string handling
MCrypt (php-mcrypt) – Standard PHP module provides mcrypt library support
Để cài đặt bạn hãy sử dụng lệnh yum –enablerepo=remi,remi-php56 install ten_module. Ví dụ:
yum –enablerepo=remi,remi-php56 install -y php-opcache php-pecl-apcu php-cli php-pear php-pdo php-mysqlnd php-pgsql php-pecl-mongo php-pecl-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

Bước 4. Stop httpd (Apache) server, Start Nginx và PHP-FPM

Stop httpd (Apache)

## CentOS 7 ##
systemctl stop httpd.service
## CentOS 6.5/5.10 ##
service httpd stop

Start Nginx

CentOS 7 ##
systemctl start nginx.service
## CentOS 6.5/5.10 ##
service nginx start

Start PHP-FPM

## CentOS 7 ##
systemctl start php-fpm.service
## CentOS 6.5/5.10 ##
service php-fpm start

Bước 5. Tự động khởi động Nginx, PHP-FPM và tắt httpd

Tắt httpd (Apache) khi boot

CentOS 7 ##
systemctl disable httpd.service
## CentOS 6.5/5.10 ##
chkconfig httpd off

Autostart Nginx

CentOS 7 ##
systemctl enable nginx.service
## CentOS 6.5/5.10 ##
chkconfig –add nginx
chkconfig –levels 235 nginx on

Autostart PHP-FPM

## CentOS 7 ##
systemctl enable php-fpm.service
## CentOS 6.5/5.10 ##
chkconfig –add php-fpm
chkconfig –levels 235 php-fpm on

Bước 6. Cấu hình Nginx và PHP-FPM

Cấu hình Nginx

– Thay đổi worker_processes

nano /etc/nginx/nginx.conf
Chỉnh worker_processes bằng với số processor VPS của bạn

– Cấu hình nginx virtual hosts

nano /etc/nginx/conf.d/default.conf

Bạn thay đổi thông tin như bên dưới:
#
# The default server
#
server {
listen 80 default_server;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Các đoạn bôi đỏ là cần phải thay đổi.

– Restart Nginx

CentOS 7 ##
systemctl restart nginx.service
## CentOS 6.5/5.10 ##
service nginx restart

Cấu hình PHP-FPM

– Chỉnh user và group

nano /etc/php-fpm.d/www.conf

Thay user và group = apache sang nginx

[…]
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user’s group
; will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
[…]

– Restart PHP-FPM

## CentOS 7 ##
systemctl restart php-fpm.service
## CentOS 6.5/5.10 ##
service php-fpm restart

Bước 7. Test cấu hình Nginx và PHP-FPM

nano /usr/share/nginx/html/info.php

Thêm đoạn sau vào
<?php
phpinfo();
?>
Test thử bằng link: http://<ip-address>/info.php. Nếu bạn thấy thông tin về PHP hiện ra thì đã cài đặt thành công.
Lưu ý: nếu bạn truy cập thẳng vào IP mà báo lỗi không kết nối được thì hãy open port http:
service iptables start
iptables -I INPUT -p tcp –dport 80 -j ACCEPT
service iptables save
service iptables restart

II. Cài đặt MariaDB trên CentOS 7/6.5/5.10

1. Thêm MariaDB repo

## CentOS 6/5 MariaDB 5.5 ##
wget -O /etc/yum.repos.d/MariaDB.repo http://mariadb.if-not-true-then-false.com/centos/$(rpm -E %centos)/$(uname -i)/5
## CentOS 6/5 MariaDB 10.0 ##
wget -O /etc/yum.repos.d/MariaDB.repo http://mariadb.if-not-true-then-false.com/centos/$(rpm -E %centos)/$(uname -i)/10

2. Cài đặt hoặc update MariaDB

CentOS 7 ##
yum install -y mariadb mariadb-server
## CentOS 6.5/5.10 ##
yum install -y MariaDB MariaDB-server

3. Khởi động MariaDB và tự động chạy khi boot

CentOS 7 ##
systemctl start mariadb.service
systemctl enable mariadb.service
## CentOS 6.5/5.10 ##
service mysql start
chkconfig –levels 235 mysql on

4. Cấu hình MariaDB

  • Set (Change) root password
  • Remove anonymous users
  • Disallow root login remotely
  • Remove test database and access to it
  • Reload privilege tables

– Bắt đầu cài đặt

/usr/bin/mysql_secure_installation
Ngay bước đầu tiên bạn sẽ bị hỏi root password, do mới cài đặt nên tất nhiên chưa có password, nhấn Enter để tiếp tục.
– Output tương tự như sau:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we\’ll need the current
password for the root user. If you\’ve just installed MariaDB, and
you haven\’t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
… Success!
Normally, root should only be allowed to connect from \’localhost\’. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
… Success!
By default, MariaDB comes with a database named \’test\’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
… Success!
Cleaning up…
All done! If you\’ve completed all of the above steps, your MariaDB
installation should now be secure.

CÀI ĐẶT WORDPRESS LÊN CENTOS

Sau khi bạn hoàn thành các bước cài đặt webserver Nginx theo 1 trong 2 cách trên, thì bước này bạn tiếp tục cài đặt wordpress lên webserver mà bạn đã hoàn thành ở trên.

Bước 1: Tải WordPress

Đến folder chứa nội dung website (nếu dùng HocVPS Script thì là /home/domain.com/public_html/)
cd /usr/share/nginx/html/
wget http://wordpress.org/latest.tar.gz
Giải nén
tar -xzvf latest.tar.gz

Bước 2: Tạo MySQL Database và User

Đăng nhập MySQL
mysql -u root -p
Tạo database
create database dbname;
Tạo và thiết lập quyền cho user
create user ‘username’@’localhost’ identified by ‘password’;
Để thay đổi password user
set password for ‘username’@’localhost’ = password(‘password’);
Thiết lập tất cả quyền cho user
grant all on dbname.* to username@localhost;
Nếu bạn muốn giới hạn quyền cho user thì dùng dòng lệnh sau
grant SELECT on dbname.* to username@localhost; // SELECT là quyền
Danh sách các quyền bạn có thể thiết lập cho user
ALL
ALTER
CREATE VIEW
CREATE
DELETE
DROP
GRANT OPTION
INDEX
INSERT
SELECT
SHOW VIEW
TRIGGER
UPDATE
Reload all the privileges
FLUSH PRIVILEGES;
Thoát
exit

Bước 3: Cài đặt WordPress

Tạo file wp-config.php
cp ./wordpress/wp-config-sample.php ./wordpress/wp-config.php
Chỉnh sửa file
sudo nano ./wordpress/wp-config.php
Điền thông tin database, user, password vào
// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘wordpress’);
/** MySQL database username */
define(‘DB_USER’, ‘wordpressuser’);
/** MySQL database password */
define(‘DB_PASSWORD’, ‘password’);
Lưu và thoát.
Di chuyển tất cả file trong folder wordpress ra ngoài
mv -f ./wordpress/* ./
Thay đổi ownership folder chứa WordPress
sudo chown nginx:nginx * -R
Giờ bạn có thể tiến hành cài đặt WordPress bằng cách mở trình duyệt truy cập http://domain.com/wp-admin/ hoặc http://IP:port/wp-admin/
Lưu ý bạn phải trỏ domain về IP Server trước, còn nếu chưa thì bạn truy cập bằng IP hoặc có thể sửa file host