NGINX HOSTING

Lưu ý: Nếu không sử dụng Nginx mà sử dụng Apache, bài thực hành thay thế là Apache Hosting

1. Giới thiệu

Nginx là một web server mới nổi và được ưa chuộng. Hiện tại, nó chỉ đứng sau Apache về mức độ phổ biến nhưng trong tương lai gần có thể vượt qua Apache. Ưu điểm của Nginx là có tốc độ xử lý/hiệu năng cao hơn các web server khác. Hạn chế của Nginx là còn ít môđun xử lý đi kèm (do còn mới; tương lai có thể được bổ sung).

Từ khi Nginx ra đời, những người thực hành web có thêm một lựa chọn mới là LEMP (Linux, Nginx, MySQL, PHP), bên cạnh LAMP (Linux, Apache, MySQL, PHP) lâu đời và nổi tiếng.

Bài thực hành này hướng dẫn cài đặt LEMP trên Ubuntu.

2. Cài đặt Nginx

- Cập nhật Ubuntu
sudo apt update
sudo apt upgrade

- Gỡ bỏ Apache (nếu có)
sudo systemctl stop apache2
sudo apt remove --purge apache2

- Cài đặt Nginx
sudo apt install nginx
- Khởi động nginx
sudo systemctl start nginx
sudo systemctl enable nginx

- Kiểm tra trạng thái nginx (trạng thái mong muốn là Active: active (running))
systemctl status nginx
hoặc sử dụng trình duyệt vào trang http://127.0.0.1

3. Cài đặt PHP

Nginx giao tiếp với PHP Interpreter thông qua CGI, khác với Apache giao tiếp với mod_php qua API.
- Cài đặt các gói PHP
sudo apt install php-fpm php-mysql
- Mở tệp cấu hình PHP tại /etc/php/7.2/cli/php.ini (thay 7.2 bằng số hiệu phiên bản PHP trên máy), tìm dòng có nội dung
;cgi.fix_pathinfo=1
và thay bằng
cgi.fix_pathinfo=0
rồi lưu tệp cấu hình.
- Khởi động lại PHP-FPM (thay 7.2 bằng số hiệu phiên bản PHP trên máy)
sudo systemctl restart php7.2-fpm
- Cấu hình nginx để nó giao tiếp với PHP-FPM
Mở tệp /etc/nginx/sites-available/default, cấu hình khối location ~ \.php$ như sau:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

- Bổ sung index.php vào danh sách tài nguyên mặc định
Trong tệp /etc/nginx/sites-available/default, tìm dòng "index ..." và bổ sung index.php vào cuối danh sách như ví dụ sau:
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;

- Khởi động lại nginx
sudo systemctl restart nginx
- Kiểm tra nginx đã làm việc với PHP bằng cách
tạo tệp /var/www/html/index.php với nội dung như sau:
<?php
phpinfo();

rồi mở trình duyệt vào trang http://127.0.0.1

4. Cài đặt MySQL

- Cài đặt MySQL
sudo apt install mysql-server
- Khởi động MySQL
sudo systemctl start mysql
sudo systemctl enable mysql

5. Cài đặt phpMyAdmin

phpMyAdmin là MySQL client được viết bằng PHP. Truy cập phpMyAdmin bằng trình duyệt nên thuận tiện cho quản trị CSDL.
- Cài đặt phpMyAdmin
sudo apt install phpmyadmin
- Tạo symlink cho truy cập phpMyAdmin
sudo ln -s /usr/share/phpmyadmin /var/www/html
- Khởi động lại Nginx
sudo systemctl restart nginx
- Truy cập phpMyAdmin từ trình duyệt theo địa chỉ http://127.0.0.1/phpmyadmin
với tên đăng nhập là "phpmyadmin" hoặc "root" và mật khẩu là mật khẩu đã thiết lập lúc cài đặt phpMyAdmin.

6. Hosting ứng dụng web

Giả sử yêu cầu hosting hai ứng dụng web với địa chỉ truy cập lần lượt là
- Bản tin: bulletin.any.com.vn
- Quản lý nhân sự: hrm.any.com.vn

Chuẩn bị

Để kiểm thử được kết quả cài đặt, cụ thể là sử dụng tên miền để truy cập ứng dụng web, hãy mở tệp hosts, đưa hai tên miền ở trên vào tệp này và cùng ánh xạ đến local IP.
Trong Terminal, chạy lệnh sau để mở tệp hosts
sudo nano /etc/hosts
Thêm các dòng sau vào cuối tệp hosts
127.0.0.1 bulletin.any.com.vn
127.0.0.1 hrm.any.com.vn

Lưu tệp và đóng nano.

Tạo thư mục gốc cho ứng dụng

Trong Terminal, chạy các lệnh sau để tạo hai thư mục gốc cho hai ứng dụng Bulletin và HRM:
sudo mkdir -p /var/www/bulletin.any.com.vn
sudo mkdir -p /var/www/hrm.any.com.vn

Phân quyền trên thư mục ứng dụng

Tiếp theo, chạy các lệnh sau để phân quyền cho các thư mục gốc đã tạo:
sudo chown -R $USER:$USER /var/www/bulletin.any.com.vn
sudo chown -R $USER:$USER /var/www/hrm.any.com.vn
sudo chmod -R 755 /var/www/bulletin.any.com.vn
sudo chmod -R 755 /var/www/hrm.any.com.vn

Tạo các trang web ví dụ

Chạy lệnh sau để tạo trang web thứ nhất cho ứng dụng Bulletin:
sudo nano /var/www/bulletin.any.com.vn/index.htm

Nhập nội dung trang index.htm của ứng dụng Bulletin như sau:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Bulletin!</title>
</head>
<body>
<h1>Success! The Bulletin block is working!</h1>
<body>
</html>

Tiếp theo, chạy lệnh sau để tạo trang web thứ hai cho ứng dụng Bulletin:
sudo nano /var/www/bulletin.any.com.vn/test.php

Nhập nội dung trang test.php của ứng dụng Bulletin như sau:
<?php
echo "Dynamic PHP page from Bulletin!";

Thực hiện tương tự các bước trên để tạo trang index.htm và test.php cho ứng dụng HRM.

Tạo Server Block cho các ứng dụng

Chạy lệnh sau để tạo server block cho ứng dụng Bulletin:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/bulletin.any.com.vn
Tiếp theo, chạy lệnh sau để mở cấu hình cho ứng dụng Bulletin:
sudo nano /etc/nginx/sites-available/bulletin.any.com.vn
và nhập nội dung như sau:
server {
	listen 80;
	listen [::]:80;
	root /var/www/bulletin.any.com.vn;
	index index.html index.htm index.php;
	server_name bulletin.any.com.vn;
	location / {
		try_files $uri $uri/ =404;
		autoindex on;
	}
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;
	}
}

Thực hiện tương tự các bước trên để tạo server block cho ứng dụng HRM.

Bật các server block và khởi động lại Nginx

Chạy các lệnh sau:
sudo ln -s /etc/nginx/sites-available/bulletin.any.com.vn /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/hrm.any.com.vn /etc/nginx/sites-enabled/
sudo systemctl restart nginx

Kiểm tra các ứng dụng đã chạy

Mở trình duyệt vào các trang sau:
http://bulletin.any.com.vn
http://bulletin.any.com.vn/test.php
http://hrm.any.com.vn
http://hrm.any.com.vn/test.php