Nginx và hai cách cài Nginx trên Ubuntu

Trước khi đến với bài này, hẳn bạn đã biết đôi chút về web server, cũng như có tò mò về sự giống và khác nhau của Nginx so với Apache. Trong bài viết này, chúng tôi sẽ giới thiệu các bạn về web server Nginx cũng như cách cài đặt Nginx bằng apt trên Ubuntu. Đặc biệt sẽ chỉ bạn cách cài Nginx từ source.

Nginx là gì?

Theo nginx.com, NGINX là phần mềm nguồn mở làm web server. Ngoài các tính năng của một máy chủ HTTP, NGINX cũng có thể hoạt động như một máy chủ proxy cho email (IMAP, POP3 và SMTP) và một trình cân bằng tải (load balancer) và proxy ngược (reverse proxy) cho các máy chủ HTTP, TCP và UDP.

Nginx được tạo ra vào 2004 bởi Igor Sysoev, khi ông đang đang cần xử lý 10000 request liên tục khi vẫn đảm bảo về hiệu năng, sự liên tục và sử dụng ít tài nguyên (RAM).

Theo W3techs, Nginx ngày càng được nhiều người sử dụng làm web server, và sẽ vượt qua Apache sớm (Nginx chiếm 42.1%, Apache chiếm 43.4% vào ngày 5/5/2019).

 

xep hang webserver

Bạn tham khảo thêm tại bài viết https://w3techs.com/technologies/history_overview/web_server/ms/y

 

So sánh Nginx và Apache

Kiến trúc cơ bản

Apache được cấu hình theo kiểu “prefork”: nghĩa là có bao nhiêu request, có bấy nhiêu process (dù request đó là request hình ảnh, file .txt hay script .php. Đương nhiên với những file tĩnh (file .txt, file .css hay các file hình ảnh) cũng được Apache tạo process để xử lý nốt. Vì vậy, Apache tốn rất nhiều tài nguyên hệ thống.

Trong khi đó, Nginx được cấu hình theo kiểu bất đồng bộ (asynchronous): nghĩa là 1 nginx process có thể xử lý nhiều request liên tục, dựa vào số lượng tài nguyên còn lại của hệ thống.

Nhờ kiểu cấu hình như vậy, Nginx có thể “nhúng” các file lập trình (như .php) vào process riêng của nó. Nghĩa là mọi request yêu cầu data được 1 process riêng của nginx thực hiện, và trả data lại cho client bằng reverse proxy.

Bên cạnh đó, đối với những file tĩnh (file .txt, file .css hay các file hình ảnh), Nginx sẽ trả dữ liệu mà không cần sự can thiệp của các module server side.

 

mo ta su khac nhau cua nginx so voi apache

 

“Nginx nhanh hơn Apache”?

Câu trả lời là không hẳn vậy. Vì nó tùy thuộc vào cách định nghĩa “nhanh” của bạn. Đương nhiên nó không thể nhanh hơn tốc độ mạng được cho phép của bạn. Nhưng nó sẽ nhanh hơn trong trường hợp:

  1. Load file tĩnh nhanh hơn: như đã nói, Nginx sẽ load file tĩnh mà không cần sự trợ giúp của các module server side.
  2. Chịu được nhiều request liên tục: vì tính “bất đồng bộ”, nginx cố gắng hết khả năng không bỏ qua bất kì request nào. (Trong khi Apache chỉ nhận số lượng request nhất định đã được xác định trước, và loại bỏ số còn lại).

Do đó nếu bạn định nghĩa “nhanh” là “số lượng user liên tục request (cả request đến file tĩnh và động) mà server có thể xử lý” thì câu trả lời là có.

 

Các bước chuẩn bị cài đặt Nginx

Những gì bạn cần để học về web server này:

  • Một con VPS nhỏ chạy Ubuntu 18.04 (Ubuntu được Nginx hỗ trợ nhiều nhất), mình khuyến khích xài Digital Ocean/
  • Một phần mềm kết nối VPS như putty trên Windows, hoặc gitbash hay terminal.

 

Hướng dẫn cài đặt Nginx

Cài nginx bằng Linux Package Manager

sử dụng Linux Package Manager hay còn gọi là APT trên Ubuntu là cách cài đặt Nginx đơn giản nhất, tuy vậy bạn không có nhiều options thêm để lựa chọn và không có hỗ trợ từ nhiều module khác.

Các lệnh bạn cần viết để cài là:

apt-get update

 

để update lên version mới nhất các package có trong hệ điều hành.

apt-get install nginx

để cài nginx

 

ps aux | grep nginx

để confirm nginx của bạn đang chạy.

 

Hoặc bạn có thể copy IP address của VPS, bỏ vào browser sẽ thấy hình ảnh "welcome to Nginx" như sau.

welcome to nginx

 

Vậy là bạn đã cài nginx bằng apt thành công rồi.

 

Cài nginx từ source và các module thêm

Đây là cách cài đặt Nginx khác, bạn có thể thay đổi config của Nginx nhiều hơn bằng cách này. Nếu bạn vẫn đang xài VPS cũ, điều trước tiên bạn cần làm là rebuild lại VPS như hình dưới.

Tiếp theo bạn sẽ vẫn phải nhập lệnh:

apt-get update

để update lên version mới nhất các package có trong hệ điều hành.

 

Đến bước này, bạn lưu ý có 2 trang nginx là nginx.org và nginx.com; Ở bài viết này, chúng ta chỉ quan tâm đến nginx.org, nginx.org là nơi lưu trữ những bài viết hướng dẫn và link down nginx.

Bạn tìm đến link https://nginx.org/en/download.html để tiến hành download Nginx, chúng ta quan tâm đến mainline version của nginx (dù stable version nó ổn định hơn).

Chọn version bạn muốn, ở đây mình chọn nginx-1.15.12, nhấp chuột phải -> copy link address.

Nếu trên ubuntu bạn có thể dùng curl hay wget để download source.

wget https://nginx.org/download/nginx-1.15.12.tar.gz

 

Sau khi chạy wget, bạn sẽ nhận được một file .tar, tar là một file nén như .zip hay .rar, bạn giải nén file tar bằng lệnh:

tar -zxvf nginx-1.15.12.tar.gz

 

List thư mục lần nữa dùng lệnh ls -l và bạn có thể thấy folder đã giải nén.

cd vào thư mục nginx bằng lệnh

cd nginx-1.15.12

 

Trước khi cài nginx bằng source, chúng ta cần cài một số compiler và development tool.

apt-get install build-essential

 

apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

 

 

Sau đó cài lại bằng lệnh, bạn lưu ý khi cài bằng lệnh dưới đây, nginx sẽ cài default:

./configure

 

Để có nhiều thông tin hơn về cài Nginx từ source, bạn tham khảo https://nginx.org/en/docs/configure.html

 

Một số tùy chỉnh khác trong quá trình cài đặt:

./configure --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module

 

  • sbin-path: nơi chạy nginx, dùng để chạy và dừng server
  • conf-path: nơi config nginx
  • error-log-path: log lỗi trong quá trình chạy nginx
  • http-log-path: log trong quá trình chạy
  • with-pcre: nói nginx thư viện pcre của hệ thống cho các đoạn code dùng biểu thức chính quy (regular expression)
  • process-id-path: dùng để biết các pid của service thứ 3 mình sẽ sử dụng sau này (đây là lợi thế của cách cài nginx bằng source, vì mình có thể cài thêm module của bên thứ 3.

 

Bạn lưu ý rằng các module của Nginx được chia làm 2 loại:

  1. Bundle module: các module có sẵn trong source của nginx (with-http_ssl_module, ngx_http_v2_module, ví dụ bạn có thể tìm hiểu thêm tại http://nginx.org/en/docs/http/ngx_http_v2_module.html)
  2. Third party module (module của các bên thứ 3)

 

Sau khi chạy custom configuration, bạn compile source bằng lệnh

make

 

Sau khi xong, để cài đặt, bạn chạy

make install

 

Kiểm tra xem mọi thứ bạn đã làm đã đúng chưa bằng lệnh:

nginx -V

 

cai nginx thanh cong

 

Nếu thấy như hình là bạn đã cài nginx thành công rồi. Vậy là bạn đã hoàn thành cài Nginx bằng 2 cách. Trong bài viết sau, Stream Hub sẽ hướng dẫn bạn viết file .conf để cấu hình Nginx.

 

Tham khảo các bài viết khác trong series web server:

  1. https://stream-hub.com/web-service
  2. https://stream-hub.com/cai-dat-nodejs
  3. https://stream-hub.com/deploy-du-an-nodejs