1. Nginx là gì?
Nginx là một webserver được open source, nhanh, nhẹ, hiệu suất cao và có thể được sử dụng để chạy các file tĩnh trên môi trường server. Nó cũng là một trong số các webserver nổi tiếng và được sử dụng nhiều hiện nay sau Apache hay Microsoft IIS
Nginx được phát âm là “Engine-X”
Trong những phiên bản đầu tiên. Nginx được thiết kế để hoạt động như một dịch vụ chuyên để serve một trang web thông qua HTTP. Thể nhưng hiện nay, nó còn làm được nhiều thứ hơn thế, Bao gồm như HTTP, HTTPS, SMTP, IMAP, POP3, ngoài ra nó cũng có thể đóng một vai rèo như một server cân băng tải hay email proxy cho IMAP, POP3, và SMTP.
2. Nginx hoạt động như thế nào?
Trước khi học về Nginx, chúng ta cần biết cách web server hoạt động thế nào. Đầu tiên, khi ai đó gửi một yêu cầu để mở một trang web. Trình duyệt sẽ liên lạc với server chứa website đó. Sau đó, server sẽ tìm kiếm đúng file yêu cầu của trang đó và gửi ngược về cho server. Đây là một loại truy vấn đơn giản nhất.
Ví dụ trên được xem như là một quá trinh xử lý đơn luồng (Single thread) – một bộ các bước xử lý dữ liệu được thực thi theo 1 trình tự duy nhất. Web server truyền thống tạo một thread cho mỗi yêu cầu (request). Tuy nhiên Nginx thì hoạt động theo một cách khác. Nó hoạt động theo kiến trúc bất đồng bộ (asynchronous), hướng sự kiện (event driven). Kiến trúc này có thể hiểu là những threads tương đồng nhau sẽ được quản lý trong một tiến trình (process), và mỗi tiến trình hoạt động chưa các thực thể nhỏ hơn gọi là worker connections. Cả bộ đơn vị này chịu trách nhiệm xử lý các threads.
Worker connections sẽ gửi các truy vấn cho một worker process, worker process sẽ gửi nó tới process cha (master process). Cuối cùng, master process sẽ trả kết quả cho những yêu cầu đó.

Điều này có vẻ đơn giản, một worker connection có thể xử lý đến 1024 yêu cầu tương tự nhau. Vì vậy, Nginx có thể xử lý hàng ngàn yêu cầu mà không gặp rắc rối gì. Đây cũng là lý do vì sao Nginx tỏ ra hiệu quả hơn khi hoạt động trên môi trường yêu cầu sự ổn định cũng như cường độ truy cập cao thương mại điện tử, trình tìm kiếm, và cloud storage.
3. Một chút về Nginx và Apache
Bên cạnh các web server phổ biến, Apache là một trong những đối thủ chính của Nginx. Tồn tại lâu đời từ thập niên 90 và có cộng đồng người dùng rất lớn. Nếu bạn cần biết loại web server nào phù hợp nhất với nhu cầu của bạn, hãy xem qua một vài so sánh cơ bản giữa Nginx server và Apache server sau.
- Hệ điều hành hỗ trợ
Tương thích là một trong số ít các vấn đề bạn nên xem trong khi chọn phần mềm. Cả Nginx và Apache đều có thể chạy trên nhiều hệ điều hành khác nhau của hệ thống Unix. Nhưng không may là, hiệu năng của Nginx trên Windows lại khá là kém hiệu quả so với Apache server - Cộng đồng
Cả Nginx và Apache đều có sự hỗ trợ từ cộng đồng rất rộng rãi. Tuy nhiên Apache lại nhỉnh hơn một phần cũng chính là do sự lâu đời của nó. Ngoài ra nó còn được bảo trợ bởi quỹ Apache Foundation. Trong khi Nginx lại chỉ mới ra đời gần đây và được maintain bởi công ty cùng tên mới được thành lập 2011 - Hiệu năng
Nginx xử lý cùng lúc 1000 kết nối tới nội dung tĩnh nhanh hơn 2 lần so với Apache và dùng ít bộ nhớ hơn. Khi so về hiệu năng trên nội dung động, cả 2 nền tảng cho tốc độ giống nhau. Nginx là lựa chọn tốt hơn cho những ai có website tĩnh nhiều hơn.
4. Cài đặt Nginx
Nginx hỗ trợ đa số hệ điều hành hiện nay. Tuy nhiên để có hiệu năng tốt nhất thì nên sử dụng các hệ điều hành nhân UNIX
Cài đặt Nginx trên các hệ điều hành dòng UNIX lại có 2 phương pháp chính
- Sử dụng các phiên bản prebuild được xây dụng sẵn trên các repo của hệ điều hành: Đây là phương pháp trực tiếp, nhanh chóng, hiệu quả nhất khi mà không cần phải thao tác nhiều
- Tự tiến hành build từ mã nguồn: Đây là phương pháp nâng cao, dành cho những nhu cầu đặc biệt, giúp kiểm soát toàn bộ quá trình xây dựng cũng như các phiên bản. Tuy nhiên mọi thứ phải được thao tác bằng tay
Ta sẽ sử dụng phương pháp đầu tiên để tiến hành cài đặt Nginx trên hệ điều hành Ubuntu
Bước 1: Dầu tiên ta sẽ tiến hành update index của local package hệ điều hành. Mở terminal và nhập lệnh
sudo apt- get update |
Bước 2: Mặc định Nginx sẽ nằm trong repo của hệ điều hành. Nên ta có thể sử dụng hệ thống apt packing để tải về băng câu lệnh:
sudo apt-get install nginx |
Bước 3: Kiểm tra
Khi Nginx được cài thông qua apt package nó sẽ được tự động assign như một service của hệ điều hành. Ta có thể quản lý nó thông qua các câu lệnh systemctl như status|start|stop|restart
sudo systemctl status nginx |
Sau khi kiểm tra bằng câu lệnh trên thành công với trạng thái như sau, ta có thể bắt đầu vào trong trình duyệt. Truy cập vào theo đường dẫn https://localhost

Nếu hiện ra thông báo này tức là chúng ta đã thành công
Các service được viết dưới dạng file .service nằm trong một trong các đường dẫn
/etc/systemd/system (thường ở đây)
/usr/lib/systemd/system
/lib/systemd/system
Bước 4: Setting firewall
Trước khi testing với Nginx server, ta cần phải điểu chỉnh một chút về firewall
Đầu tiên ta gõ lệnh
sudo ufw app list |
Màn hình sẽ hiện ra kiểu như sau
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH |
Đây là các profile hiện tại ta có thể setting cho Nginx, ở bài viết này ta sẽ chỉ sử dựng profile Nginx HTTP để serve cổng 80
Tiến hành chọn profile bằng câu lệnh
sudo ufw allow 'Nginx HTTP' |
Bước 5: Tiếp theo ta sẽ tiến hành setup một dự án tĩnh cho Nginx server. Một Nginx server có thể setting để host cho nhiều dự án khác nhau qua cùng domain, mỗi dự án sẽ được serve thông qua một Server Block (tương tự như Vitrual Host của Apache).
Mặc định ta đã có sẵn một trang web đã được serve ngay khi ta tiên hành tuy cập vào https://localhost. Trang web này là một file html nằm ở /var/www/html, ta có thể chỉnh sửa config của site đến thư mục chứa dự án của mình. Tuy nhiên Nginx có khả năng host nhiều site nên ta sẽ tạo một trang web khác.
Đầu tiên ta tạo một folder trong Ubuntu là nơi để chứa dự án của mình bằng câu lệnh mkdir với flag -p để tạo thư mục nếu chưa có
sudo mkdir -p /var/www/example.com/html |
Sau đó ta sẽ setting permission cho folder này với -R để chắc rằng permisson sẽ áp dụng với tất cả thư mục con trong đó
sudo chmod -R 755 /var/www/example.com |
Tiếp theo ta sẽ thêm một file html, một dự án React đã được build, hay bất kể dạng web tính nào vào trong folder /var/www/example.com/html. Vậy là ta đã hoàn thành bước đầu của việc setup
Vậy để Nginx có thể serve được file ở trong folder trên. ta cần phải config cho Nginx trỏ đến đó.
Có 2 folder ta cần quan tâm khi tiến hành config đó là /etc/nginx/sites-available và /etc/nginx/sites-enabled
Trong Folder site-available chứa các file config của một site, Ở đây đã có sẵn config của trang index mà ta thấy khi chay Nginx server ở trên. Ta sẽ không sờ vào đây mà tạo một file mới (hoặc nếu chưa quen cấu trúc bạn có thể copy và đổi tên khác)
Tạo và mở một file với text editor quen thuộc của ubuntu là nano
sudo nano /etc/nginx/sites-available/example.com |
Copy nội dung sau vào
server { listen 80 ; listen [::]: 80 ; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ = 404 ; } } |
Vậy là xong bước định nghĩa web site. Ta cần một bước nữa để website có thể thực sự hoạt động là tạo một symlink của file config ở trên đến folder /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ |
Vậy là xong. Tiếp theo ta sẽ kiểm tra xem liệu cẩu trúc của file config đã đúng hay chưa bằng câu lệnh
sudo nginx -t |
Nếu không có vấn đề gì, ta sẽ tiến hành restart Nginx server để áp dụng những thay đổi trên bằng lệnh
sudo systemctl restart nginx |
Vậy là ta đã tiến hành cài đặt xong và chạy một ứng dụng trên Nginx server. Ta có thể test bằng cách truy cập https://example.com, và thấy trang web của mình ở đây.
5. Cấu trúc thư mục của Nginx trong Ubuntu
Content:
/var/www/html
: Nơi chứa mặc định của web content có thể điều chỉnh trong file config.
Server Configuration
/etc/nginx
: Thư mục chứa các config của Nginx, mọi thứ về config được lưu ở đây/etc/nginx/nginx.conf
: Config chính của Nginx, có tác dụng như một config global của server/etc/nginx/sites-available/
: Nơi chứa những file config của các site trong server. Nginx sẽ không sủ dụng những file config này cho tới khi nó được link đến folder site-enabled/etc/nginx/sites-enabled/
: Nơi chứa các link từ folder site-available. Nginx sẽ chỉ sử dụng những file config ở đây để tạo một Server block
Server Logs
/var/log/nginx/access.log
: Nơi chứa thông tin về các access đến server/var/log/nginx/error.log
: Nơi chứa các log liên quan đến lỗi server, …