Web back-end (3) - Web server

Bài trước: Web back-end (2) - Tổng quan về phát triển ứng dụng web
-----
3. Web server

Chúng ta đã biết có 3 cách để tạo ra một ứng dụng web là [1] viết thuần từ đầu, [2] dùng framework hoặc [3] sử dụng CMS. Dù bạn lựa chọn phương pháp nào thì cũng cần phải có những hiểu biết căn bản về hạ tầng của một ứng dụng web. Web server là một thành phần của hạ tầng ứng dụng web. Chúng ta cùng tìm hiểu về chủ đề này.

3.1 Web server là gì

Web server (máy chủ web) là một máy tính (hoặc một phần mềm), được sử dụng để lưu trữ và cung cấp toàn bộ nội dung cho một website/ứng dụng web (tạm gọi chung là ứng dụng web).

Web server hoạt động như một trung tâm lưu trữ toàn bộ thông tin để tạo ra một ứng dụng web, bao gồm văn bản, hình ảnh, video và dữ liệu khác. Khi bạn nhập địa chỉ ứng dụng web vào trình duyệt web, máy tính của bạn sẽ gửi yêu cầu (request) đến web server lưu trữ ứng dụng web đó. Sau đó, web server sẽ phản hồi (response) bằng cách gửi thông tin được yêu cầu trở lại máy tính của bạn, và trình duyệt của bạn sẽ hiển thị thông tin đó cho bạn xem. Xem hình minh họa:


Một số chức năng chính của web server

- Lưu trữ các tập tin của ứng dụng web: web server lưu trữ tất cả các tập tin và dữ liệu tạo nên ứng dụng web, ví dụ các tập tin HTML, hình ảnh và video.

- Nhận yêu cầu (request): khi người dùng truy cập một ứng dụng web, trình duyệt web của họ sẽ gửi một request tới web server. Web server sẽ tiếp nhận request này.

- Xử lý request: sau khi nhận được request, web server sẽ thực hiện xử lý request. Việc xử lý request có thể là: đọc nội dung các tập tin, thực thi các đoạn mã nguồn, kết nối và làm việc với cơ sở dữ liệu.

- Gửi phản hồi (response): sau khi xử lý xong request, web server sẽ gửi response cho trình duyệt của người dùng, sau đó, trình duyệt sẽ hiển thị kết quả response cho người dùng

Quá trình xử lý của web server

[1] nhận request

[2] phân tích request, gửi tới ứng dụng web để xử lý

[3] đọc dữ liệu từ cơ sở dữ liệu

[4] đổ dữ liệu vào trang HTML (các template HTML)

[5] gửi trang HTML (đã bao gồm dữ liệu) (response) về trình duyệt người dùng

[6] trình duyệt người dùng hiển thị nội dung response

[7] trình duyệt gửi riêng một request khác để lấy các nội dung tĩnh của ứng dụng web (HTML, CSS, JavaScript, hình ảnh, và các tài nguyên khác).

Một số phần mềm web server phổ biến

- Apache

- Nginx

- Nodejs

- IIS

- Tom cat

- Lighttpd

Kiến trúc của một web server

Như đã đề cập, web server là thuật ngữ để chỉ các phần mềm như Apache, Nginx, IIS, Nodejs; ngoài ra web server cũng là thuật ngữ để chỉ máy server có cài đặt các phần mềm web server.

Một máy web server có các đặc điểm sau:

- Phần cứng là một máy server chuyên dụng, cấu hình mạnh, khả năng chịu lỗi cao, chạy liên tục

- Hệ điều hành dành cho máy chủ

- Có cài đặt phần mềm web server (HTTP server - Apache, Nginx, IIS), có thể có hệ quản trị cơ sở dữ liệu (Database), trình dịch và thực thi mã nguồn (Scripting Language)

3.2 Nginx

Để hiểu thêm về web server, chúng ta cùng thực hiện cài đặt, chạy và thực hiện một vài cấu hình trên một phần mềm web server cụ thể.

Tải Nginx

Nginx là phần mềm web server mã nguồn mở.

Vào trang https://nginx.org/, chọn mục Download, chọn bản phù hợp với máy tính của bạn để tải về. Ví dụ: chọn bản nginx/Windows-1.24.0

Cài đặt Nginx

Trước khi cài đặt, bạn vào lại trang https://nginx.org/, chọn mục Documentation để đọc thêm về việc cài đặt Nginx.

Để sử dụng Nginx, chúng ta không cần cài đặt, chỉ cần giải nén thư mục nginx-.zip vào ổ đĩa C:\ là có thể sử dụng được.

Nhấp đúp chuột vào tập tin nginx.exe để chạy chương trình Nginx.

Nếu chạy được Nginx, mở Task Manager của Windows, chọn tab Processes, sẽ thấy tiến trình nginx. Trong Task Manager, chọn tab Details sẽ thấy 2 tiến trình của Nginx (master process và worker process).

Nếu không chạy được Nginx hoặc chạy bị lỗi, bạn mở tập tin error.log, trong C:\nginx-1.24.0\logs để đọc thông tin lỗi.

Nginx chạy dưới dạng một chương trình (program) chứ không chạy ở chế độ dịch vụ (service). Chương trình Nginx chạy ngầm, nên để tắt nó thì bạn phải vào Task Manager hoặc vào cửa sổ dòng lệnh để tắt.

Một số lệnh của Nginx

Bạn có thể sử dụng các lệnh để làm việc với Nginx. Gõ lệnh vào các cửa sổ dòng lệnh để thực thi, ví dụ một số ứng dụng dòng lệnh: CMD, Command Prompt, Powershell.

Một số lệnh:

(nhớ di chuyển con trỏ chuột tới thư mục có chứa tập tin nginx.exe, hoặc thực hiện cấu hình biến môi trường thì mới chạy được các lệnh này)

- start nginx               : khởi chạy Nginx 

- nginx -s stop           : tắt Nginx ngay lập tức

- nginx -s quit            : không chấp nhận kết nối mới, chờ các client hoàn thành tác vụ dang dở rồi mới tắt Nginx

- nginx -s reload       : thay đổi cấu hình, khởi chạy lại worker process với cấu hình mới

- nginx -s reopen      : mở lại các tập tin log

Ví dụ, chạy các lệnh sau trong cửa sổ CMD, sau mỗi lệnh, mở Task Manager để quan sát chương trình Nginx biến mất và xuất hiện lại trong Task Manager:

C:\nginx-1.24.0>nginx -s stop

C:\nginx-1.24.0>start nginx

C:\nginx-1.24.0>nginx -s quit

C:\nginx-1.24.0>

Sau khi chạy Nginx, bạn mở trình duyệt web, gõ vào đường dẫn sau (động tác này chính là gửi một request tới web server):

http://localhost

Nếu nginx đang ở trạng thái sẵn sàng nhận request > sau khi nhận request > xử lý và trả về response > trình duyệt nhận được response > thực thi nội dung response > xuất nội dung lên cửa sổ trình duyệt:

Cấu hình Nginx

Tập tin chứa các cấu hình của Nginx là nginx.conf, nằm trong thư mục C:\nginx-1.24.0\conf

Bạn mở nginx.conf bằng Notepad hoặc VS code, tìm tới dòng có chứa nội dung 

server {

            listen 80;

… 


Sửa số 80 thành một số bất kỳ, ví dụ 9000. Đây là giá trị cổng (port) của web server sử dụng để lắng nghe request từ các client. 

Lưu lại (save) tập tin nginx.conf.

Vào chương trình cửa sổ dòng lệnh (CMD), chạy lệnh nginx -s reload để cập nhật lại tập tin cấu hình.

Vào trình duyệt web, gõ lại lệnh:

http://localhost

Trình duyệt sẽ xuất hiện dòng thông báo

This site can’t be reached

Lý do là chúng ta đã đổi cổng chờ request của Nginx từ 80 thành 9000, do vậy bạn nhập http://localhost là đang dùng cổng mặc định 80, nên không gửi được request tới Nginx server.

Chúng ta, nhập lại đường dẫn là: 

http://localhost:9000

Trình duyệt sẽ hiển trị trang Welcome của Nginx.

Web root và trang mặc định trong Nginx

Mở tập tin nginx.conf bằng VS code hoặc Notepad.

Trong mục cấu hình của server:

 server {

        listen       9000;

        server_name  localhost;

 

        #charset koi8-r;

 

        #access_log  logs/host.access.log  main;

 

        location / {

            root   html;

            index  index.html index.htm;

        }

Lưu ý: các dòng cấu hình có dấu thăng (#) ở phía trước là dòng chú thích, hoặc các dòng cấu hình đã bị vô hiệu (không có hiệu lực thực thi).

Mục location chỉ ra rằng thư mục web root (thư mục gốc của web server) là thư mục html, và tập tin mặc định được gọi sẽ là index.html, nếu không có index.html thì gọi tập tin index.htm.

Bạn mở tập tin index.html trong C:\nginx-1.24.0\html, sửa lại mã nguồn tùy thích. 

Mở cửa sổ dòng lệnh, reload lại web server.

Refresh lại trình duyệt để xem nội dung hiển thị đã được cập nhật theo ý bạn. 

3.3 Bài tập

Bài tập 3.1 Thực hành lại các cài đặt trong bài học.

Câu 3.2 Một số phần mềm web server phổ biến. Phát biểu nào không đúng?

A. Apache

B. Nginx

C. SSI

D. Nodejs

Câu 3.3 Các chức năng của Web server là gì. Phát biểu nào không đúng?

A. Lưu trữ các tập tin của ứng dụng web

B. Nhận request từ client

C. Xử lý request

D. Nhận response từ máy client

Bài tập 3.4 Thực hiện một số cấu hình cho Nginx:

- (a) Lắng nghe trên cổng 65535

- (b) Trỏ web root về một thư mục khác ổ đĩa C:\ (ví dụ: D:\TeoShop)

- (c) Khi client gửi request tới web root, tập tin mặc định trả về là index.py, tạo thêm tập tin index.py để kiểm tra.

- (d) Lắng nghe trên cổng 65536 được không? Tại sao

-----

Gợi ý làm bài tập

3.2(C), 3.3(D) 

Bài tập 3.4 Thực hiện một số cấu hình cho Nginx:

(a), (b), (c): thực hiện cấu hình trong tập tin nginx.conf

(d): xem lại kích thước của trường port trong một packet.

----

Cập nhật: 14/2/2025

-----

Bài sau: Web back-end (4) - Ứng dụng web bán hàng