QUESTIONS? CALL: (+84) 24 666 026 12

HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

HiveTech is a technology company focus on AI and big data technologies for educational purposes.

T (+84) 24 666 026 12
Email: contact@hivetech.vn

HiveTech JSC
No. 3 Thanh Cong, Ba Dinh, Ha Noi

Open in Google Maps
  • HOME
  • SERVICES
  • OUR COMPANY
  • PARTNERS
  • CONTACT
  • RECRUITMENT
  • BLOGS
FREEQUOTE
  • Home
  • Uncategorized
  • Nginx Server
2021-04-15

Nginx Server

by Thao Nguyen / Wednesday, 24 March 2021 / Published in Uncategorized

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 đó.

What is NGINX

Đ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 FullNginx HTTPNginx HTTPSOpenSSH

Đâ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, …
  • Tweet

About Thao Nguyen

What you can read next

File upload trong Spring
MỐI QUAN HỆ BIỆN CHỨNG GIỮA JAVASCRIPT VÀ JAVA?
KINH NGHIỆM KHI ĐI LÀM VIỆC ONSITE

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • [Fresher/Junior] Business Analyst

    1. Mô Tả Công Việc Là cầu nối giao tiếp với nội...
  • Chuyên viên tuyển dụng IT

    1. Mô Tả Công Việc Chịu trách nhiệm tuyển dụng ...
  • Fresher/Junior Tester

    1. Mô Tả Công Việc Phân tích yêu cầu dự án phần...
  • Java Servlet Filter

    I. Các tình huống  1. Người dùng yêu cầu m...
  • Front-End và Back-End giao tiếp như thế nào?

    I. Vấn đề xảy ra khi không giao tiếp – Tô...

Recent Comments

  • hivequeen on Fresher ReactJS Developer Full-time 2020
  • Khuất Anh Tuấn on Fresher ReactJS Developer Full-time 2020
  • hivequeen on [Tuyển Dụng] Junior/Fresher Frontend Developers (jQuery, Angular, VueJS, ReactJS)
  • nguyễn viết đạt on [Tuyển Dụng] Junior/Fresher Frontend Developers (jQuery, Angular, VueJS, ReactJS)

Archives

  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • July 2019
  • June 2019

Categories

  • Networking
  • Posts
  • Recruitment
  • Sale
  • Technology
  • Uncategorized

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Featured Posts

  • [Fresher/Junior] Business Analyst

    0 comments
  • Chuyên viên tuyển dụng IT

    0 comments
  • Fresher/Junior Tester

    0 comments
  • Java Servlet Filter

    0 comments
  • Front-End và Back-End giao tiếp như thế nào?

    0 comments
  • DISCLAIMER
  • SUPPORT POLICY
  • LEGAL
HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

© HiveTech 2019 All rights reserved

TOP