Tải bản đầy đủ (.pdf) (84 trang)

Báo cáo chuyên đề học phần lập trình web nâng cao đề tài tìm hiểu nền tảng net core 6 0

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.23 MB, 84 trang )

lOMoARcPSD|39472803

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN LẬP TRÌNH WEB NÂNG CAO

ĐỀ TÀI: TÌM HIỂU NỀN TẢNG .NET CORE 6.0

Sinh viên thực hiện: Hoàng Minh An

Đặng Đình Việt Anh

Nguyễn Hữu Việt Anh

Đôn Nguyên Thắng

Nguyễn Quốc Việt

Giảng viên hướng dẫn: Trần Trung

Mã sinh viên: 21810320503

21810310178

21810310042

21810320482

21810310007


Lớp: D16QTANM

STT Họ và tên HÀ NỘI - 2023 Điểm Chữ ký
Nội dung thực hiện

lOMoARcPSD|39472803

Nguyễn Hữu Việt Anh Thực hiện code Demo
1 MSV: 21810310042 Biên soạn báo cáo
Tìm hiểu ASP.NET, ASP.NET Core
Hoàng Minh An Tìm hiểu Hệ quản trị cơ sở dữ liệu
2 MSV: 21810320503 PostgreSQL
Tìm hiểu AJAX
Đặng Đinh Việt Anh Tìm hiểu NoSQL, MongoDB,
3 MSV: 21810310178 Cassandra
Tìm hiểu .NET và Webservers
Nguyễn Quốc Việt Biên soạn báo cáo
4 MSV: 21810310007
Tìm hiểu Webservice
Đôn Nguyên Thắng Tìm hiểu RAZOR PAGE
5 MSV: 21810320482
PHIẾU CHẤM ĐIỂM

Phiếu chấm điểm của giảng viên:

Họ và tên Chữ ký Ghi chú

Giảng viên chấm 1 :

Giảng viên chấm 2 :


1

lOMoARcPSD|39472803

MỤC LỤC

LỜI CẢM ƠN............................................................................................................................................6

CHƯƠNG 1: Tổng quan .NET và Webservers.......................................................................................7

1. Tổng quan .NET 6..........................................................................................................................7

1.1. Hỗ trợ......................................................................................................................................9

1.2. Hiệu năng..............................................................................................................................10

1.3. C# 10.....................................................................................................................................10

1.4. Bảo mật.................................................................................................................................10

1.5. Arm64...................................................................................................................................11

2. Tổng quan về NGINX/Kestrel/IIS/Apache................................................................................11

2.1. NGINX..................................................................................................................................11

2.1.1. NGINX là gì..............................................................................................................11

2.1.2. Tính năng của NGINX.............................................................................................12


2.1.3. Cài đặt.......................................................................................................................12

2.1.4. Cấu hình NGINX.....................................................................................................13

2.2. Apache..................................................................................................................................18

2.2.1. Apache là gì?............................................................................................................18

2.2.2. Apache và những web server khác.........................................................................18

2.2.2.1. Apache vs NGINX....................................................................................................18

2.2.2.2. Apache vs Tomcat....................................................................................................19

2.2.3. Ưu điểm.....................................................................................................................19

2.2.4. Nhược điểm...............................................................................................................20

2.3. Kestrel...................................................................................................................................20

2.3.1. Kestrel là gì?.............................................................................................................20

2.3.2. Tại sao sử dụng Kestrel?.........................................................................................20

2.3.3. Sử dụng Kestrel........................................................................................................20

2.3.3.1. Tự host (Self Hosting)..............................................................................................21

2.3.3.2. Đằng sau Web Server khác.....................................................................................22


2.4. IIS..........................................................................................................................................23

2.4.1. IIS là gì?....................................................................................................................23

2.4.2. IIS có thể làm được gì?............................................................................................24

2.4.3. IIS hoạt động như thế nào?.....................................................................................24

2.4.4. Các tính năng của IIS..............................................................................................25

2

lOMoARcPSD|39472803

2.4.5. So sánh IIS với các web server khác.......................................................................25

3. Tổng quan về lập trình với ngơn ngữ Python............................................................................26

3.1. Ngơn ngữ Python.................................................................................................................26

3.1.1. Python là gi?.............................................................................................................26

3.1.2. Ứng dụng của Python..............................................................................................26

3.1.3. Lợi thế của Python...................................................................................................27

3.2. Các bước cài đặt môi trường lập trình Python..................................................................28

CHƯƠNG 2: ASP.NET và ASP.NET Core...........................................................................................33


1. ASP.NET......................................................................................................................................33

1.1. ASP.NET là gì?....................................................................................................................33

1.2. Chức năng của ASP.NET....................................................................................................33

1.3. Các thành phần của ASP.NET............................................................................................33

2. ASP.NET Core.............................................................................................................................33

2.1. ASP.NET Core là gì?...........................................................................................................33

2.2. Ứng dụng..............................................................................................................................33

2.3. Sự khác nhau giữa ASP.NET và ASP.NET Core..............................................................35

2.3.1. Cấu trúc project.......................................................................................................35

2.3.2. Cấu trúc một solution..............................................................................................36

2.3.3. Tập tin dự án csproj.................................................................................................37

2.3.4. Tập tin Program.cs..................................................................................................38

2.3.5. Tập tin Startup.cs.....................................................................................................38

3. Demo Project................................................................................................................................40

CHƯƠNG 3: Hệ quản trị cơ sở dữ liệu PostgreSQL............................................................................43


1. Tìm hiểu tổng quan Hệ quản trị cơ sở dữ liệu PostgreSQL......................................................43

1.1. Đặc điểm của PostgreSQL...................................................................................................43

1.2. Tính năng..............................................................................................................................43

1.3. Ưu điểm và hạn chế.............................................................................................................45

2. Kết nối ASP.NET Core với PostgreSQL có nhiều tác dụng quan trọng trong việc phát triển
ứng dụng web.......................................................................................................................................46

2.1. Đặc điểm...............................................................................................................................46

2.2. Ưu và nhược điểm................................................................................................................46

2.2.1. Ưu điểm.....................................................................................................................46

2.2.2. Nhược điểm...............................................................................................................47

3. Tổng quan kết nối ASP.NET Core MVC, với Hệ quản trị cơ sở dữ liệu PostegreSQL..........47

CHƯƠNG 4: AJAX.................................................................................................................................53

3

lOMoARcPSD|39472803

1. AJAX là gì?..................................................................................................................................53


2. Sử dụng AJAX trong Javascript.................................................................................................53

2.1. Khởi tạo đối tượng....................................................................................................................53

2.2. Các thuộc tính và phương thức................................................................................................54

2.2.1. Thuộc tính..........................................................................................................................54

2.2.2. Phương thức.......................................................................................................................54

2.2.3. AJAX hoạt động như thế nào?..........................................................................................55

3. POST & GET Request trong AJAX...........................................................................................55

3.1. GET Request.............................................................................................................................56

3.2. POST Request...........................................................................................................................56

3.3. Ưu và Nhược điểm của việc sử dụng AJAX.......................................................................56

3.3.1. Ưu điểm.....................................................................................................................56

3.3.2. Nhược điểm...............................................................................................................57

4. Demo Ajax....................................................................................................................................57

CHƯƠNG 5: NoSQL, MongoDB, Cassandra........................................................................................58

1. NoSQL..............................................................................................................................................58


1.1. Cơ sở dữ liệu NoSQL là gì?......................................................................................................58

1.2. Tại sao lại cần phải có NoSQL............................................................................................58

1.3. Một số đặc điểm...................................................................................................................58

1.4. Lý do nên sử dụng NoSQL..................................................................................................59

2. Cassandra.........................................................................................................................................59

2.1. Cassandra là gì?.......................................................................................................................59

2.2. Internet of things.......................................................................................................................60

2.3. Cơ chế dữ liệu............................................................................................................................60

3. Mongo DB........................................................................................................................................62

3.1. Mongo DB là gì..........................................................................................................................62

3.2. Ưu điểm của mongoDB.............................................................................................................63

3.3. Nhược điểm của mongoDB.......................................................................................................64

4. Demo: Thiết lập kết nối với Cassandra.........................................................................................64

CHƯƠNG 6: Tổng quan Webservice.....................................................................................................68

1. Tổng quan về WebService...............................................................................................................68


1.1. WebService làC gì.....................................................................................................................68

1.2. Các loại Web Service hiện nay.................................................................................................68

1.3. Web Service hoạt động thế nào?.........................................................................................68

1.4. Lợi ích khi sử dụng...................................................................................................................69

4

lOMoARcPSD|39472803

1.5. Ưu điểm và nhược điểm...........................................................................................................69
1.5.1. Ưu điểm..............................................................................................................................69
1.5.2. Nhược điểm........................................................................................................................69

2. Kiến trúc WebService......................................................................................................................70
2.1. Vai trò của Web Service...........................................................................................................70
2.2. Các công nghệ sử dụng trong Web Service.............................................................................70
2.3. WSDL (Ngôn ngữ mô tả Web Service)....................................................................................70

3. Tổng quan về RESTful Web Service..............................................................................................71
3.1. Restful Web Service là gì?........................................................................................................71
3.2. Đặc điểm....................................................................................................................................71
3.3. Những yếu tố chính của RESTful Web Service......................................................................71
3.4. So sánh REST với SOAP..........................................................................................................72

CHƯƠNG 7: TỔNG QUAN RAZOR PAGE........................................................................................73
1. Tổng quan Single Page Application............................................................................................73
1.1. Khái niệm..................................................................................................................................73

1.2. Single Page Application hoạt động ra sao?.............................................................................73
1.3. Một vài hạn chế của Single Page Application.........................................................................73
2. Tổng quan Razor Page................................................................................................................74
2.1. Thành phần Razor Page...........................................................................................................74
2.2. Phương pháp tạo một Razor Page...........................................................................................74
3. Dependency Injection......................................................................................................................75
3.1. Khái niệm..................................................................................................................................75
3.2. Các loại Dependency Injection............................................................................................76
3.3. Các Ưu điểm và Nhược điểm..............................................................................................77
3.3.1. Ưu điểm..............................................................................................................................77
3.3.2. Nhược điểm........................................................................................................................77

KẾT LUẬN..............................................................................................................................................79

5

lOMoARcPSD|39472803

LỜI CẢM ƠN
Lời đầu tiên, em xin chân thành gửi lời cảm ơn tới các thầy cô giáo trong
Trường Đại học Điện Lực nói chung và các thầy cơ giáo trong Khoa Cơng nghệ
thơng tin nói riêng đã tận tình giảng dạy, truyền đạt cho chúng em những kiến thức
cũng như kinh nghiệm quý báu trong suốt quá trình học.
Đặc biệt chúng em xin gửi lời cảm ơn đến thầy Trần Trung - giảng viên
Khoa Công nghệ thông tin - Trường Đại học Điện Lực. Thầy đã tận tình theo sát
giúp đỡ trực tiếp chỉ bảo, hướng dẫn trong suốt quá trình nghiên cứu và học tập của
chúng em. Trong thời gian học tập với thầy, nhóm chúng em khơng những tiếp thu
thêm nhiều kiến thức bổ ích mà cịn học tập được tinh thần làm việc, thái độ nghiên
cứu khoa học nghiêm túc, hiệu quả. Đây là những điều rất cần thiết cho chúng em
trong q trình học tập và cơng tác sau này.

Do thời gian thực hiện có hạn kiến thức cịn nhiều hạn chế nên bài làm của
chúng em chắc chắn không tránh khỏi những thiếu sót nhất định. Em rất mong
nhận được ý kiến đóng góp của thầy cơ giáo và các bạn để em có thêm kinh
nghiệm và tiếp tục hồn thiện đồ án của mình. Chúng em xin chân thành cảm ơn!

6

lOMoARcPSD|39472803

CHƯƠNG 1: Tổng quan .NET và Webservers
1. Tổng quan .NET 6
Vào tháng 11/2021, MS đã ra măt bản .NET 6 đánh dấu một bước phát triển

rất ngoạn mục cho nền tảng này. Cụ thể là lần đầu tiên có một bản cập nhật lớn
LTS (Long Term Support) tức là hỗ trợ lâu dài (trong ít nhất 3 năm) hợp nhất
giữa .NET Core và .NET Framework. Trước đây có .NET 5 đã là phiên bản tiền đề
để hợp nhất 2 nền tảng .NET của Microsoft nhưng chưa phải là LTS mà đến 6.0
mới là LTS. Điều này có nghĩa là các ứng dụng doanh nghiệp có thể tự tin nâng
cấp lên 6.0 từ .NET Core 3.1, .NET 5 hay .NET Framework 4.8 mà không lo về độ
ổn định cũng như thời gian cam kết của Microsoft.

Bản cập nhật này thực sự có những tính năng mà cộng đồng mong chờ, nổi
bật nhất là cơ chế Hot Reload cho ứng dụng .NET. Ngoài ra chúng ta cũng có
phiên bản mới nhất của C# là C# 10 và F# 6. Song song với đó thì Microsoft cũng
luôn cải tiến hiệu năng của nền tảng .NET qua từng lần ra mắt.

Chúng ta có thể điểm qua các thay đổi và các tính năng mới như:
 C# 10 và F# 6
 HTTP/3
 JSON Processing

 WebAssembly
 OpenTelemetry
 Cải tiến performance
 Hỗ trợ Arm64

Tương tự như các bản release trước, nền tảng .NET 6 cũng hỗ trợ cr Linux,
macOS và Windows. Ngồi ra cịn có Visual Studio 2022 là một mơi trường phát
triển tích hợp (IDE) cho nền tảng .NET 6. Những ai dùng Visual Studio Code thì
vẫn n tâm là ln xài được với mọi phiên bản. Riêng có Visual Studio thì phải
nâng cấp lên Visual Studio bản 2022 để có thể phát triển được .NET 6. Riêng với
Visual Studio for Mac thì vẫn có thể dùng Visual Studio 2019.

Các tính năng mới trong .NET 6 như sau:

7

lOMoARcPSD|39472803

 Hỗ trợ Production stress-tested dành cho ứng dụng Microsoft
services, ứng dụng cloud chạy bởi các công ty khác, và đã mở mã nguồn.

 Hỗ trợ trong 3 năm hay gọi là LTS.
 Nền tảng thống nhất hỗ trợ nhiều loại trình duyệt, cloud, desktop, IoT,

và mobile apps, tất cả sử dụng chung code base có thể share code dễ dàng.
 Hiệu năng được cải thiện rất nhiều và cho tác tác vụ I/O cụ thể, bằng cách

giảm thời gian thực thi, độ trễ và bộ nhớ sử dụng.
 C# 10 cải tiến ngôn ngữ bằng các tính năng như record structs, implicit


using, và new lambda capabilities, trong khi trình biên dịch tăng khả năng
gen code.
 Hot Reload cho phép bạn tránh được việc build và khởi động lại ứng dụng
khi có thay đổi mới trong lúc ứng dụng vẫn đang chạy, hỗ trợ trên Visual
Studio 2022 và từ .NET CLI cho C# lẫn Visual Basic.
 Cloud diagnostics được cải tiến với OpenTelemetry và dotnet monitor, hỗ
trợ cho tìm lỗi trên môi trường Production trên Azure App Service.
 JSON APIs được tăng khả năng và có hiệu năng cao hơn với source
generator cho bộ xử lý JSON.
 Minimal APIs được giới thiệu trong .NET Core giúp đơn giản và dễ dàng
bắt đầu cũng như cải tiến hiệu năng của HTTP services.
 Blazor có thể được render từ JavaScript và tích hợp với ứng dụng Javascript
base.
 WebAssembly AOT biên dịch cho ứng dụng Blazor WebAssembly
(Wasm), as well as support for runtime relinking and native dependencies.
 Single-page apps được giới thiệu với ASP.NET Core giờ đây sử dụng một
pattern linh hoạt giúp bạn có thể sử dụng Angular, React hoặc các
framework frontend Javascript khác.
 HTTP/3 được thêm vào ASP.NET Core, HttpClient, và gRPC có thể tương
tác với HTTP/3 giữa client và server.
 Cơ chế đọc ghi file (File IO) đã hỗ trợ liên kết tượng trưng và cải tiến mạnh
mẽ về hiệu năng với việc viết lại từ đầu FileStream class.

8

lOMoARcPSD|39472803

 Bảo mật được cải tiến bằng việc hỗ trợ OpenSSL 3, phương thức mã hoá
ChaCha20Poly1305, và các biện pháp ngăn chặn chiều sâu, đặc biệt
là W^X và CET.


 Single-file apps (extraction-free) được ra mắt trên Linux, macOS và
Windows (trước đây chỉ có trên Linux).

 IL trimming hiệu quả hơn với cảnh báo mới, bộ phân tích để đảm bảo kết
quả đúng cuối cùng.

 Source generators và analyzers được thêm vào giúp bạn tái hiện bug tốt
hơn, an toàn hơn và tối ưu hiệu năng hơn.

 Source build cho phép tổ chức như Red Had xây dựng .NET từ mã nguồn
mở và tự xây dựng cho người dùng của mình.

1.1. Hỗ trợ
 Bản .NET 6 là một bản hỗ trợ lâu dài (LTS) được phát hành và được hỗ trợ

trong 3 năm. Nó hỗ trợ nhiều hệ điều hành bao gồm cả macOS Apple
Silicon và Windows Arm64.
 Red Hand hỗ trợ .NET trên Red Hat Enterprise Linux và đã làm việc với
team.
 .NET 6 được hỗ trợ với Visual Studio 2022 và Visual Studio 2022 for Mac.
Nó khơng hỗ trợ Visual Studio 2019, Visual Studio for Mac 8 hoặc MSBuild
16. Nếu bạn muốn dùng .NET 6 thì phải upgrade lên Visual Studio 2022.
Nếu dùng Visual Studio Code thì có thể phát triển sử dụng C# Extension
 Có thể bắt đầu migrate ứng dụng của mình lên .NET 6 từ .NET 5. Nó cũng
tương thích tốt khi upgrade từ .NET 3.1 và .NET 5.
 Nền tảng thống nhất và mở rộng
 Có thể dùng 1 nền tảng mà có thể phát triển nhiều loại ứng dụng từ Desktop,
Web, IoT, WebAssembly, Cloud...và có thể chia sẻ được code base dễ dàng.
Một điều thú vị nữa là .NET Multi-platform App UI (.NET MAUI) tức là

chính ta có thể viết code với 1 project nhưng có thể tạo ra một ứng dụng
chạy trên cả Desktop lẫn Mobile. .NET MAUI được đính kèm trong .NET 6.
 Có thể phát triển cả Windows Desktop với Windows Forms và WPF cũng
như trên cloud với ASP.NET Core.

9

lOMoARcPSD|39472803

1.2. Hiệu năng
Các nội dung chủ đạo trong việc tăng hiệu năng như:

 Dynamic PGO: viết tắt của Dynamic Profile-guided Optimization
(PGO) cho phép biên dịch nhanh, tăng hiệu năng khởi động và tăng khả
năng phục vụ nhiều hơn số request (dự tính 26%) số request trên giây.

 Cải tiến xử lý JSON
 Cải tiến hiệu năng nhập xuất File, ví dụ với .NET 5 và .NET 6 ghi ghi 1 file

100MB cho ra 2 kết quả rất tốt.

1.3. C# 10
C# 10 có rất nhiều tính năng mới như:

 Global using directive: sử dụng global using sẽ không phải using mọi nơi
như System namespace chẳng hạn.

 File scoped namespace: không cần phải lồng class trong namespace
 Record struct
 Hot Reload


Tính năng hot reload là một tính năng được mong đợi nhất hỗ trợ cho nhà
phát triển có thể tăng hiệu quả làm việc. Cho phép edit code ngay khi ứng dụng
đang chạy, giảm thời gian chờ rebuild, khởi động lại và điều hướng đến đúng điểm
bạn có thay đổi. Hot Reload có sẵn trong dotnet watch CLI và Visual Studio 2022.
Bạn có thể sử dụng Hot Reload với các loại ứng dụng khác nhau từ ASP.NET
Core, Blazor, .NET MAUI, Console, Windows Forms, WPF, WinUI 3, Azure
Functions...

1.4. Bảo mật
Bảo mật được cải tiến đáng kể trong .NET 6 từ việc mơ hình, mã hố và

ngăn chặn xâm nhập. Trên Linux chúng ta có OpenSSL, trên macOS và Windows

10

Downloaded by linh tran ()

lOMoARcPSD|39472803

chúng ta có chức năng tương tự từ hệ điều hành. Với mỗi phiên bản .NET chúng ta
thường cần thêm OpenSSL và .NET 6 hỗ trợ OpenSSL 3.

1.5. Arm64
Trên .NET Core 3.0 đã hỗ trợ Arm 32 nhưng với .NET 6 đã hỗ trợ Arm 64

giúp .NET 6 tương thích nhiều loại thiết bị hơn.
2. Tổng quan về NGINX/Kestrel/IIS/Apache
2.1. NGINX
2.1.1. NGINX là gì

NGINX là một web server mạnh mẽ mã nguồn mở. Nginx sử dụng kiến trúc

đơn luồng, hướng sự kiện vì thế nó hiệu quả hơn Apache server. Nó cũng có thể
làm những thứ quan trọng khác, chẳng hạn như load balancing, HTTP caching, hay
sử dụng như một reverse proxy. Nginx là kiến thức không thể thiếu đối với một
web developer, system administrator hay devops.

Các mốc ra đời và phát triển của Nginx

11

Downloaded by linh tran ()

lOMoARcPSD|39472803

Năm 2002, Igor Sysoev phát triển Nginx ban đầu và công bố lần đầu vào
năm 2004. Tháng 7 năm 2011, công ty Nginx Inc được thành lập với trụ sở đầu
tiên tại San Francisco, California, USA.

2.1.2. Tính năng của NGINX
Những tính năng của NGINX
 Có khả năng xử lý hơn 10.000 kết nối cùng lúc với bộ nhớ thấp.
 Phục vụ tập tin tĩnh (static files) và lập chỉ mục tập tin.
 Tăng tốc reverse proxy bằng bộ nhớ đệm (cache), cân bằng tải đơn giản và
khả năng chịu lỗi.
 Hỗ trợ tăng tốc với bộ nhớ đệm của FastCGI, uwsgi, SCGI, và các máy chủ
memcached.
 Kiến trúc modular, tăng tốc độ nạp trang bằng nén gzip tự động.
 Hỗ trợ mã hoá SSL và TLS.
 Cấu hình linh hoạt; lưu lại nhật ký truy vấn

 Chuyển hướng lỗi 3XX-5XX
 Rewrite URL (URL rewriting) dùng regular expressions
 Hạn chế tỷ lệ đáp ứng truy vấn
 Giới hạn số kết nối đồng thời hoặc truy vấn từ 1 địa chỉ
 Khả năng nhúng mã PERL
 Hỗ trợ và tương thích với IPv6
 Hỗ trợ WebSockets
 Hỗ trợ truyền tải file FLV và MP4
 Những tính năng máy chủ mail proxy của Nginx
 Các phương pháp xác thực :
 POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
 IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
 SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
 Hỗ trợ SSL, STARTTLS và STLS
2.1.3. Cài đặt

12

Downloaded by linh tran ()

lOMoARcPSD|39472803

Có 2 cách để cài đặt NGINX, có thể sử dụng gói (package) dựng sẵn hoặc
cài đặt từ source.

Phương thức đầu tiên dễ và nhanh hơn, nhưng cài đặt từ source cung cấp khả
năng cài đặt thêm các module khác giúp NGINX mạnh mẽ hơn. Nó cho phép
chúng ta tùy chỉnh cho phù hợp với nhu cầu của ứng dụng.

- Để cài đặt một gói Debian dựng sẵn, thứ duy nhất cần làm là:

sudo apt-get update

sudo apt-get install nginx
- Sau khi quá trình cài đặt kết thúc, bạn có thể kiểm tra mọi thứ là ỔN bằng
cách chạy lệnh dưới đây, nó sẽ hiển thị phiên bản NGINX được cài đặt:

sudo nginx -v

nginx version: nginx/1.18.2
- Webserver mới sẽ được cài đặt tại /etc/nginx/. Nếu bạn vào trong thư mục
này, bạn sẽ thấy nhiều tệp tin và thư mục. Nhưng thứ quan trọng nhất cần
chú ý là tệp tin nginx.conf và thư mục sites-available.
2.1.4. Cấu hình NGINX
Những thiết lập quan trọng nhất ở trong tập tin nginx.conf, mặc định nó sẽ

như thế này:
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;

}

http {

13


Downloaded by linh tran ()

lOMoARcPSD|39472803

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml
application/xml application/xml+rss text/javascript;


include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Tệp tin được cấu trúc thành các ngữ cảnh. Đầu tiên là events, và thứ 2
là http. Cấu trúc này có một vài lợi thế trong việc cấu hình, như mỗi ngữ cảnh có

14

Downloaded by linh tran ()

lOMoARcPSD|39472803

thể lồng trong ngữ cảnh khác, cái kế thừa mọi thứ từ cha mẹ của chúng nhưng cũng
có thể ghi đè thiết lập nếu cần.

Nhiều thứ trong tệp tin này có thể tinh chỉnh dựa theo nhu cầu của bạn,
nhưng bạn cũng có thể sử dụng các thiết lập mặc định. Một số phần quan trọng của
tệp tin cấu hình này là:

- worker_processes: Thiết lập này định nghĩa số worker processes mà NGINX
sẽ sử dụng. Bởi vì NGINX là đơn luồng (single threaded), nó thường bằng
với số lõi CPU.

- worker_connection: Đây là số lượng tối đa của các kết nối đồng thời cho
mỗi worker process và nói cho các worker process của chúng ta có bao
nhiêu người có thể được phục vụ đồng thời bởi NGINX.

- access_log & error_log: Đây là những tệp tin mà NGINX sẽ sử dụng để log
bất kỳ lỗi và số lần truy cập. Các bản ghi này thường được sử dụng để gỡ lỗi

hoặc sửa chữa.

- gzip: Đây là các thiết lập nén GZIP của các NGINX reponse. Tính năng này
có nhiều thiết lập phụ, phần bị comment bởi mặc định có thể giúp hiệu suất
được cải thiện đáng kể. Trong các thiết lập phụ của GZIP, cần quan tâm
tới gzip_comp_level, nó là mức nén và nằm trong khoảng từ 1 tới 10. Thông
thường, giá trị này không nên lớn hơn 6 — trên mức này lợi ích từ việc nén
là khơng đáng kể, vì nó cần sử dụng nhiều CPU hơn. gzip_types là một danh
sách các kiểu response sẽ được nén.
NGINX có thể hỗ trợ nhiều hơn một website, và các tệp tin định nghĩa các

trang web của bạn ở trong thư mục /etc/nginx/sites-available.
Tuy nhiên, các tệp tin trong thư mục này khơng “live” — bạn có thể có

nhiều tệp tin định nghĩa các trang web ở đây, nhưng NGINX khơng thực sự làm
bất cứ điều gì với chúng trừ khi chúng được symlink (liên kết tượng trưng) tới thư
mục /etc/nginx/sites-enabled (bạn cũng có thể copy chúng tới thư mục này, nhưng
symlink đảm bảo rằng chỉ có duy nhất một bản copy của mỗi tệp tin được theo
dõi).

Nó cung cấp cho bạn một phương thức để nhanh chóng đưa các trang web
online hoặc offilne mà không cần phải thực sự xóa bất kỳ tệp tin nào — khi bạn

15

Downloaded by linh tran ()

lOMoARcPSD|39472803

sẵn sàng cho một trang web online, tạo symlink tới sites-enabled và khởi động lại

NGINX.

Thư mục site-available bao gồm các cấu hình cho các host ảo (virtual
host). Nó cho phép web server có thể cấu hình cho nhiều trang web với các cấu
hình riêng biệt. Các trang web trong thư mục không live và chỉ được cho phép nếu
chúng ta tạo một symlink tới thư mục sites-enabled.

Bạn có thể tạo một tệp tin mới cho ứng dụng của mình hoặc chỉnh sửa một
tệp tin mặc định. Một cấu hình thơng thường sẽ như dưới đây:
upstream remoteApplicationServer {

server 10.10.10.10;
}

upstream remoteAPIServer {
server 20.20.20.20;
server 20.20.20.21;
server 20.20.20.22;
server 20.20.20.23;

}

server {
listen 80;
server_name www.customapp.com customapp.com
root /var/www/html;
index index.html

location / {
alias /var/www/html/customapp/;

try_files $uri $uri/ =404;

}

location /remoteapp {

16

Downloaded by linh tran ()

lOMoARcPSD|39472803

proxy_set_header Host $host:$server_port;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://remoteAPIServer/;

}

location /api/v1/ {
proxy_pass https://remoteAPIServer/api/v1/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_redirect http:// https://;


}
}

Giống như nginx.conf, nó cũng sử dụng khái niệm các ngữ cảnh lồng nhau
(và tất cả cũng được lồng trong ngữ cảnh HTTP CỦA nginx.conf, vì thế chúng
cũng kế thừa mọi thứ từ nó).

Ngữ cảnh server định nghĩa một server ảo để xử lý các request từ client
của bạn. Bạn có thể có nhiều khối server, và NGINX sẽ chọn một trong số chúng
dựa trên các chỉ thị listen và server_name.

Trong một khối server, chúng ta định nghĩa nhiều ngữ cảnh location được
sử dụng để quyết định cách xử lý các request từ client. Bất cứ khi nào một request
đến, NGINX sẽ thử khớp URI tới một trong số các định nghĩa location và xử lý nó
cho phù hợp.

Có nhiều chỉ thị quan trọng có thể được sử dụng dưới ngữ cảnh location,
chẳng hạn như:

 try_files sẽ cố gắng phục vụ các tệp tin tĩnh được tìm thấy trong thư mục
được trỏ tới bởi chỉ thị gốc.

 proxy_pass sẽ gửi request tới một proxy server cụ thể.

17

Downloaded by linh tran ()

lOMoARcPSD|39472803


 rewrite sẽ viết lại URI tới dựa trên một regular expression để một khối
location có thể xử lý nó.
Ngữ cảnh upstream định nghĩa một pool của các server cái NGINX sẽ ủy

quyền các request tới. Sau khi chúng ta tạo một khối upstream và định nghĩa một
server bên trong nó chúng có thể tham chiếu nó bằng tên bên trong các khối
location. Thêm nữa, một ngữ cảnh upstream có thể có nhiều server được gán trong
nó vì rằng NGINX sẽ làm một vài load balancing khi ủy quyền các request.

2.2. Apache
2.2.1. Apache là gì?
Apache là phần mềm web server miễn phí mã nguồn mở, hiện đang là một

trong những web server được sử dụng phổ biến trên thế giới. Tên chính thức của
Apache là Apache HTTP Server, được điều hảnh và phát triển bởi Apache
Software Foundation.

Các yêu cầu gửi tới máy chủ sử dụng HTTP còn được gọi tắt là HTTP
request. Do được cài đặt trên web server (phần cứng) nên Apache hay được gọi là
web server hay HTTP server. Khi sử dụng thuật ngữ web server, chúng ta hiểu
rằng người nói đang đề cập tới góc độ phần mềm.

2.2.2. Apache và những web server khác
2.2.2.1. Apache vs NGINX

Nginx, là một ứng dụng web server được phát hành năm 2004. Ngày nay,
nó đã phổ biến rất nhiều trong giới lập trình web. Nginx được tạo để xử lý các vấn
đề được gọi là c10k problem (10,000 connections), có nghĩa là web server sử dụng
threads để xử lý truy vấn của khách không thể thực hiện được hơn 10,000 kết nối

cùng lúc.

Vì Apache sử dụng cấu trúc dạng thread, chủ sở hữu các website nặng có
traffic lớn sẽ gặp phải vấn đề hiệu xuất. Nginx là một trong các web server có thể
xử lý vấn đề c10k và có lẽ là phần mềm thành cơng nhất làm việc này.

Nginx có kiến trúc xử lý dạng “sự kiện” (event) không phải tạo process
mới cho mỗi truy vấn. Thay vào đó, nó xử lý truy vấn trong một thread duy nhất.
Master process sẽ quản lý nhiều worker processes mà thực sự quản lý việc xử lý

18

Downloaded by linh tran ()

lOMoARcPSD|39472803

truy vấn. Dạng quản lý sự kiện như vậy của Nginx phân tán truy vấn một cách hiệu
quả để đạt hiệu quả quản lý tốt hơn.

Nếu bạn có một website có traffic lớn, Nginx là lựa chọn tối ưu, vì nó có
thể xử lý nhiều tiến trình với tài ngun thấp nhất có thể. Khơng phải ngẫu nhiên
mà nhiều website lớn như Netflix, Hulu Pinterest, Airbnb đều đang sử dụng nó.

Tuy nhiên, đối với những doanh nghiệp vừa và nhỏ, Apache tỏ ra hiệu quả
hơn Nginx, vì nó dễ cấu hình hơn, nhiều modules hơnv à là một mơi trường thân
thiện cho người mới bắt đầu hơn.

2.2.2.2. Apache vs Tomcat
Tomcat là một web server cũng được phát triển bởi Apache Software
Foundation, vì vậy tên chính thức của nó là Apache Tomcat. Nó cũng là một server

HTTP, tuy nhiên, nó hỗ trợ mạnh cho ứng dụng Java thay vì website tĩnh. Tomcat
có thể chạy nhiều bản Java chuyên biệt như Java Servlet, JavaServer Pages (JSP),
Java EL, và WebSocket.
- Tomcat được tạo đặc biệt riêng cho Java apps, mặc dù Apache là vẫn là một

server HTTP. Bạn có thể sử dụng Apache với nhiều ngơn ngữ lập trình khác
(PHP, Python, Perl, vâng vâng.) với sự giúp đỡ của module Apache phù hợp
(mod_php, mod_python, mod_perl, etc.).
- Mặc dù bạn có thể sử dụng Tomcat server để phục vụ trang web tĩnh, nhưng
nó khơng hiệu quả như là khi sử dụng Apache. Ví dụ, Tomcat sẽ tải máy ảo
Java lên trước và những thư viện Java liên quan khác, mà website thông
thường thì khơng cần thiết.
- Tomcat cũng khó cấu hình hơn các web server khác. Ví dụ, để chạy
WordPress, hãy dùng các server dành cho HTTP như là Apache hoặc
NGINX.
2.2.3. Ưu điểm
- Apache là giải pháp tài chính hiệu quả. Apache là phần mềm mã nguồn mở
và miễn phí, kể cả cho mục đích thương mại.
- Có độ tin cậy cao, ổn định, khơng chỉ được cập nhật thường xuyên, mà còn
được nâng cấp với nhiều bản vá lỗi bảo mật liên tục.

19

Downloaded by linh tran ()


×