Hướng Dẫn Cấu Hình LEMP VirtualHosts Trên CentOS 7
LEMP
LEMP là một nhóm phần mềm nguồn mở thường được cài đặt cùng nhau để cho phép máy chủ lưu trữ các trang web động và ứng dụng web. LEMP được viết tắt từ 4 thành phần của nó:
- L – Hệ điều hành Linux
- E – Nginx (Engine x) một máy chủ web
- M – Hệ quản trị cơ sở dữ liệu MySQL hoặc MariaDB
- P – Ngôn ngữ lập trình PHP
Trên server sẽ cấu hình chạy 2 web site là:
- tudv1.tudv.xyz – đường dẫn: /home/tudv1/public_html
- tudv2.tudv.xyz – đường dẫn: /home/tudv2/public_html
Cài đặt LEMP trên CentOS 7
Trước tiên tắt selinux
vi /etc/sysconfig/selinux : selilux=disabled
reboot
1 – Cài NGINX
Update yum và mở rộng thư viện
Nginx không có sẵn trong kho lưu trữ CentOS mặc định nên trước tiên chúng ta cần thêm kho lưu trữ EPEL bằng cách chạy lệnh :
yum update -y
yum install epel-release -y
Cài đặt nginx
yum install nginx -y
Khởi động dịch vụ
systemctl start nginx
systemctl enable nginx
Mở 2 port firewalld zone public.
firewall-cmd –zone=public –permanent –add-port=80/tcp
firewall-cmd –zone=public –permanent –add-port=443/tcp
firewall-cmd –reload
Kiểm tra xem Nginx đã bind trên cổng 80 hay chưa bằng lệnh
netstat -pnltu | grep nginx
2 – Cài đặt Mariadb
yum install mariadb-server mariadb -y
Chạy maria
systemctl start mariadb
systemctl enable mariadb
service mariadb restart
Khai báo root và bảo mật mariadb
mysql_secure_installation
Bạn tạo mật khẩu root Mysql .Nhấn Enter = yes, Ngược lại nhập no
3 – Cài đặt kho lưu trữ Remi để có thể sử dụng các phiên bản PHP mới nhất
Cài đặt kho Remi
mkdir /data && cd /data
yum install yum-utils -y
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
Sau khi cài đặt gói Remi xong, cần chọn phiên bản PHP mà mình cần cài đặt và kích hoạt gói chứa phiên bản PHP đó
yum-config-manager –enable remi-php80
Cài các module của PHP 8.0
yum install -y php php-fpm php-ldap php-zip php-embedded php-cli php-mysql php-common php-gd php-xml php-mbstring php-mcrypt php-pdo php-soap php-json php-simplexml php-process php-curl php-bcmath php-snmp php-pspell php-gmp php-intl php-imap perl-LWP-Protocol-https php-pear-Net-SMTP php-enchant php-pear php-devel php-zlib php-xmlrpc php-tidy php-opcache php-cli php-pecl-zip unzip gcc
Xem phiên bản php mặc định
php -v
PHP là thành phần để hiển thị nội dung động, nó xử lý các tập lệnh, kết nối với cơ sở dữ liệu MySQL để lấy thông tin và chuyển nội dung đã xử lý cho máy chủ web để hiển thị.
Không giống như Apache, Nginx cần một chương trình trung gian giữa nó và trình biên dịch PHP được gọi là PHP-FPM để xử lý các PHP request. Điều này giúp Nginx cải thiện hiệu suất đáng kể trên những trang PHP. Ngoài ra, chúng ta sẽ cần php-mysql, một mô-đun PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL.
Trong phần này, chúng ta sẽ đi sâu hơn vào vai trò của PHP-FPM:
FPM là viết tắt của “FastCGI Process Manager”, mỗi khi có 1 request được gửi đến, nó sẽ được xử lý bởi 1 worker (process), PHP-FPM có nhiệm điều khiển công việc tải request đến worker, sinh và diệt các worker.
Tập hợp các worker lại với nhau được gọi là 1 pool (nhóm). và với 1 Server PHP-FPM có thể có nhiều pool, trong mỗi pool sẽ lại có nhiều worker đang xử lý request.
PHP-FPM điều phối request gửi đến, 1 worker chỉ có thể xử lý 1 request tại 1 thời điểm
Vậy mục đích sinh ra pool để làm gì ? Việc tạo ra các pool riêng biệt trong thực tế là việc chạy nhiều website ở trên cùng 1 Server. Trong môi trường như này, khi các website đều chạy dưới quyền 1 user, nếu có lỗ hổng từ 1 website thì hacker có thể truy cập vào website để lấy cắp dữ liệu. Vì vậy ta nên chia ra mỗi website được xử lý bởi 1 pool riêng biệt, mỗi pool lại có owner User khác nhau làm tăng khả năng bảo mật. Ngoài ra, ở mỗi pool ta còn có thể cấu hình tối ưu cho riêng từng site để tăng hiệu suất.
Tiến hành lập user cho từng website, không cung cấp cho chúng quyền đăng nhập hoặc liên kết thông tin nào khác:
useradd -s /sbin/nologin tudv1
Thêm tudv1 và vào group nginx để cho phép webserver tương tác với user và ngược lại.
usermod -a -G tudv1 nginx
mkdir /home/tudv1/public_html
Tạo foder public_html trong /home/tudv1
Chuyển chủ sở hữu cá nhân và nhóm của folder public html cho cá nhân và nhóm tudv1
chmod 750 /home/tudv1/
chown -R tudv1. /home/tudv1/public_html
Tương tự với tudv2
useradd -s /sbin/nologin tudv2
usermod -a -G tudv2 nginx
Tạo foder public_html trong /home/tudv2
mkdir /home/tudv2/public_html
chmod 750 /home/tudv2/
chown -R tudv2. /home/tudv2/public_html
Cài đặt này sẽ làm user tudv1 không thể xem hay can thiệp được vào dữ liệu user tudv2.
Tạo php-fpm pool mới cho từng site bằng cách copy file cấu hình mặc định:
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/fpm-tudv1.conf
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/fpm-tudv2.conf
Xóa bỏ pool mặc định:
Cấu hình pool tudv1:
vi /etc/php-fpm.d/fpm-tudv1.conf
Các giá trị thay đổi
- [www] = [tudv1] ; Dòng 4
- user= nginx ; Dòng 24
- group =nginx ; Dòng 26 :
- listen = /var/run/tudv1-fpm.sock ; Dòng 38
- listen.owner = nginx ; Dòng 49 bỏ # đầu dòng
- listen.group = nginx ; Dòng 50 bỏ # đầu dòng
Chỉnh sửa trên đã thực hiện 3 việc:
- Cấp quyền truy cập vào các thư mục như httpd cho user tudv1.
- Thay đổi php-fpm từ listen trên cổng 9000 qua TCP sang listen trực tiếp trên socket file /var/run/tudv1-fpm.sock.
- Thay đổi owner và group của tệp socket trên thành nginx.
Cấu hình tương tự như vậy với tudv2
vi /etc/php-fpm.d/fpm-tudv2.conf
Tiến hành khởi động và enable php-fpm:
systemctl enable –now php-fpm
systemctl status php-fpm
Ngoài file cấu hình mặc định /etc/nginx/nginx.conf, Nginx còn cung cấp thư mục /etc/nginx/conf.d để lưu trữ các file cấu hình cho từng trang web riêng biệt (khá tương tự với virtual host của Apache).Chúng ta sẽ tạo mới file cấu hình cho tudv1 và tudv2 của mình tại thư mục này:
vi /etc/nginx/conf.d/tudv1.conf
Dán vào:
server {
listen 80;
server_name tudv1.tudv.xyz;access_log /var/log/nginx/tudv1.tudv.xyz-access.log;
error_log /var/log/nginx/tudv1.tudv.xyz-error.log;
root /home/tudv1/public_html;
index index.php index.html;location / {
try_files $uri $uri/ =404;
}location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/tudv1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Tiếp tục với conf của tudv2
vi /etc/nginx/conf.d/tudv2.conf
Làm tương tự
server {
listen 80;
server_name tudv2.tudv.xyz;access_log /var/log/nginx/tudv2.tudv.xyz-access.log;
error_log /var/log/nginx/tudv2.tudv.xyz-error.log;
root /home/tudv2/public_html;
index index.php index.html;location / {
try_files $uri $uri/ =404;
}location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/tudv2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Giải thích:
listen – cổng mà site sẽ lắng nghe. website1 listen trên port 80 nên sẽ ghi đè lên cấu hình mặc định của nginx.
server_name – Tên domain/sub của site
root – đường dẫn mã nguồn
fastcgi_pass – đường dẫn của file sock php-fpm
Kiểm tra lỗi:
nginx -t
Restart Nginx để áp dụng các thay đổi:
systemctl restart nginx
Test thử thêm vào các file index.php 1 đoạn thể hiện nội dung để xem sự hoạt động của php-fpm
vi /home/tudv1/public_html/index.php
php-fpm.conf : error_log = /var/log/php-fpm/fpm-error.log : trạng thái rảnh rỗi của pool , sẵn sàng điều worker xử lý request
Phân quyền cho php-fpm.sock
chmod 666 /var/run/tudv1-fpm.sock
chmod 666 /var/run/tudv2-fpm.sockchown nginx:nginx /var/run/tudv1-fpm.sock
chown nginx:nginx /var/run/tudv2-fpm.sock
4-Cài đặt wordpress.
Tạo database name và user database sử dụng cho wordpress
Đăng nhập vào mysql
mysql -u root -p
Nhập password đã tạo cho MariaDB server đã tạo trước đó
Tạo cơ sở dữ liệu
CREATE DATABASE tudv1;
Sau khi tạo xong cơ sở dữ liệu, ta cần tạo người dùng cho cơ sở dữ liệu đó.
CREATE USER tudv1@localhost IDENTIFIED BY ‘Pp098765a@1’;
Tại thời điểm này, ta đã tạo một người dùng cơ sở dữ liệu, tuy nhiên ta vẫn chưa cấp cho người dùng đó quyền truy cập vào cơ sở dữ liệu. Có thể thêm các quyền đó bằng lệnh sau:
GRANT ALL PRIVILEGES ON tudv1.* TO tudv1@localhost IDENTIFIED BY ‘Pp098765a@1’;
Bây giờ người dùng có quyền truy cập vào cơ sở dữ liệu, ta cần xóa các đặc quyền để MySQL biết về những thay đổi đặc quyền gần đây mà ta đã thực hiện
FLUSH PRIVILEGES;
Tạo DB với site tudv2
CREATE DATABASE tudv2;
CREATE USER tudv2@localhost IDENTIFIED BY ‘Pp098765a@1’;
GRANT ALL PRIVILEGES ON tudv2.* TO tudv2@localhost IDENTIFIED BY ‘Pp098765a@1’;
FLUSH PRIVILEGES;
exit
Tải wordpress và copy vào /home/user public_html
yum install wget
mkdir /data && cd /data
wget http://wordpress.org/latest.tar.gz
Giải nén tệp vừa tải xuống
tar -xzvf latest.tar.gz
Chuyển wordpress vào public_html từng user
rsync -av /data/wordpress/* /home/tudv1/public_html
rsync -av /data/wordpress/* /home/tudv2/public_html
Khai báo kết nối database của wordpress mới tải về
cd /home/tudv1/public_html
Tạo tệp wp-config.php bằng cách sao chép tệp mẫu wp-config-sample.php mà WordPress đã cung cấp
cp wp-config-sample.php wp-config.php
Chỉnh sửa tệp wp-config.php mới với thông tin cơ sở dữ liệu chính xác mà ta đã tạo ở trên
vi wp-config.php
Thay đổi các giá trị DB_NAME, DB_USER, DB_PASSWORD thành các giá trị đã thiết lập ở trên
Làm tương tự với tudv2.
cd /home/tudv2/public_html
cp wp-config-sample.php wp-config.php
Chỉnh wp-config.php của user tudv2
Truy cập vào trang quản trị WordPress bằng cách thêm hậu tố /wp-admin vào sau tên miền http://tudv1.tudv.xyz/wp-admin/ , http://tudv1.tudv.xyz/wp-admin/ để tạo tài khoản admin, thông tin sở hữu website…
Tổng kết
Như vậy Nhân Hòa đã hướng dẫn các bạn cách dựng LEMP trên CENTOS7.
Hy vọng bài viết này hữu ích với các bạn. Chúc các bạn thành công !
Nếu trong quá trình thực hiện theo hướng dẫn mà gặp phải vấn đề hoặc có điều gì thắc mắc thì bạn cứ để lại phản hồi bên dưới.
Xin chào các bạn và hẹn gặp lại các bạn trong các bài viết sau tại wiki.nhanhoa.com