NGINX là gì? Trong lĩnh vực công nghệ web, NGINX đã trở thành một trong những máy chủ web và proxy nổi tiếng và mạnh mẽ nhất. Với khả năng xử lý hàng ngàn kết nối cùng một lúc, Web server này giúp giải quyết các vấn đề về cân bằng tải, bộ nhớ đệm và nhiều tác vụ khác. Qua bài viết này, hãy cùng VinaHost tìm hiểu cách cài đặt, cấu hình và sử dụng Web server này một cách hiệu quá nhất nhé!
1. NGINX là gì?
NGINX là một máy chủ web mã nguồn mở mạnh mẽ và được biết đến rộng rãi trong việc phục vụ các trang web qua giao thức HTTP.
Với việc sử dụng kiến thức đơn luồng, kỹ thuật đồng bộ không đồng bộ (asynchronous), NGINX đạt được hiệu suất và ổn định cao, trở thành lựa chọn ngày càng phổ biến hơn so với Apache server. Nó có khả năng thực hiện các nhiệm vụ như cân bằng tải, caching HTTP, cũng như hoạt động như một reverse proxying, streaming media, và proxy email cho các giao thức như IMAP, POP3, và SMTP…
Với lợi thế về tốc độ, độ tin cậy và khả năng mở rộng mạnh mẽ, nhiều đại diện lớn trong ngành công nghiệp công nghệ như Google, Netflix, Adobe, Cloudflare, WordPress,… đều chọn Web server này làm phần quan trọng trong cơ sở hạ tầng của họ.
NGINX Docker là một phiên bản của máy chủ web NGINX được đóng gói trong một container Docker. Docker là một nền tảng ảo hóa hàng đầu, giúp đơn giản hóa quá trình triển khai ứng dụng bằng cách đóng gói chúng và tất cả các phụ thuộc của chúng vào các container.
NGINX Docker cung cấp một cách thuận tiện để triển khai và quản lý máy chủ web NGINX mà không cần cài đặt và cấu hình trực tiếp trên hệ điều hành mục tiêu.
Khi sử dụng NGINX Docker, bạn có thể triển khai nhanh chóng một môi trường web mà không lo lắng về các vấn đề phức tạp của cài đặt và cấu hình truyền thống. Containerization giúp tăng khả năng di động, linh hoạt và quản lý dễ dàng trong quá trình triển khai ứng dụng web của bạn.
Theo wappalyzer, tính đến năm 2024, NGINX là công nghệ máy chủ web hàng đầu, chiếm 40% các trang web trên toàn thế giới. Điều này đưa NGINX vượt qua Apache HTTP Server (35%) và LiteSpeed (10%)
2. Lịch sử hình thành và phát triển của NGINX
Web server này được sáng tạo bởi Igor Sysoev, một nhân viên của công ty Rambler Media Group, vào năm 2002. Ông Igor bắt đầu phát triển Web server này với mục tiêu ban đầu là giải quyết vấn đề về tải đồng thời trên các trang web của Rambler, một trong những trang web lớn tại Nga.
Dựa trên kinh nghiệm của mình làm việc với các máy chủ web trước đó, ông Sysoev đã xây dựng NGINX với một kiến trúc sử dụng mô hình đồng thời không đồng bộ (event-driven) thay vì mô hình đồng bộ truyền thống. Nhờ đó, Web server này có thể xử lý đồng thời hàng nghìn kết nối mà không làm giảm hiệu suất.
NGINX được phát hành dưới dạng mã nguồn mở đầu tiên vào tháng 10 năm 2004. Sự linh hoạt, hiệu suất cao, và khả năng mở rộng đã giúp Web server này nhanh chóng trở thành một trong những máy chủ web phổ biến nhất trên toàn thế giới.
Trong quá trình phát triển, web server này không chỉ là một máy chủ web mà còn trở thành một giải pháp toàn diện cho nhiều vấn đề khác nhau như bộ cân bằng tải, proxy ngược, caching, và nhiều ứng dụng mạng khác. Sự linh hoạt và khả năng tương tác với nhiều loại ứng dụng khác nhau đã làm cho Web server này trở thành một công cụ quan trọng trong quản lý và tối ưu hóa các hệ thống web và mạng lớn.
Cùng VinaHost điểm qua một số dấu mốc quan trọng trong hành trình của Web server này nhé:
- Năm 2002 – sáng tạo: Igor Sysoev, một nhân viên của Rambler Media Group ở Nga, bắt đầu phát triển Web server này để giải quyết vấn đề về tải đồng thời trên trang web của Rambler.
- Năm 2004 – phiên bản đầu tiên: Web server này được phát hành lần đầu tiên dưới dạng mã nguồn mở vào tháng 10 năm 2004, đánh dấu bước khởi đầu chính thức của nó.
- Năm 2008 – phiên bản 1.0: Web server này đạt đến bản 1.0, chỉ số mốc quan trọng cho sự ổn định và tin cậy của nền tảng.
- Năm 2011 – phổ biến trên toàn thế giới: Web server này trở thành một trong những máy chủ web phổ biến nhất trên toàn thế giới, được sử dụng rộng rãi bởi các trang web lớn và doanh nghiệp.
- Năm 2013 – NGINX, INC.: Công ty NGINX, Inc. được thành lập để hỗ trợ phát triển và cung cấp dịch vụ hỗ trợ cho Web server này. Igor Sysoev chuyển từ vị trí CTO tại Rambler sang làm CTO tại NGINX, Inc.
- Năm 2016 – NGINX Plus và Merger: NGINX, Inc. giới thiệu NGINX Plus, một phiên bản có thương mại và tính năng mở rộng của Web server này. F5 Networks mua lại NGINX, Inc. trong một thương vụ trị giá hơn 670 triệu USD.
- Năm 2019 – Phiên bản 1.16 và 1.17: Web server này phát hành các phiên bản mới, mang đến cải tiến về hiệu suất và tính năng.
- Ngày nay – sự phát triển và đa nhiệm: Web server này tiếp tục được sử dụng rộng rãi, không chỉ là máy chủ web mà còn là giải pháp đa nhiệm cho bộ cân bằng tải, proxy ngược, và nhiều ứng dụng mạng khác. Web server này đã trải qua một hành trình ấn tượng từ sự sáng tạo đến trở thành một trong những công cụ quan trọng trong ngành công nghiệp web và mạng.
Xem thêm: HAProxy là gì? Thuật toán, thuật ngữ cân bằng tải nên nhớ
3. Cách thức hoạt động của NGINX
Web server này thực hiện chức năng giống như nhiều máy chủ web khác. Tính chất cơ bản của việc mở một trang web vẫn giữ nguyên: trình duyệt web của bạn liên lạc với máy chủ chứa trang web và yêu cầu file tương ứng. Quy trình xử lý dữ liệu vẫn tuân theo mô hình single-thread, tức là các bước diễn ra theo trình tự tuyến tính, với mỗi yêu cầu kích hoạt một thread riêng.
Tuy nhiên, NGINX áp dụng kiến trúc không đồng bộ (asynchronous) và sự kiện hướng (event-driven). Hệ thống này cho phép quản lý các threads tương đồng trong một tiến trình. Mỗi tiến trình hoạt động bao gồm các thực thể nhỏ hơn được gọi là worker connections, chịu trách nhiệm xử lý tất cả các threads.
Worker connections chuyển yêu cầu đến worker process, sau đó worker process chuyển chúng tới master process, và master process phản hồi yêu cầu. Điều này giải thích tại sao một worker connection có thể xử lý đến 1024 yêu cầu tương tự. Đồng thời, web server này có khả năng xử lý hàng ngàn yêu cầu đa dạng cùng một lúc, tận dụng sức mạnh của kiến trúc không đồng bộ để nâng cao hiệu suất.
4. Tính năng nổi bật của NGINX
4.1. Tính năng của máy chủ HTTP NGINX
Dưới đây là một số tính năng quan trọng của máy chủ HTTP NGINX:
- Xử lý đồng thời (Concurrency Handling): NGINX sử dụng mô hình xử lý bất đồng bộ (asynchronous) để có thể xử lý hàng nghìn kết nối đồng thời mà không chiếm dụng nhiều tài nguyên.
- Cân bằng tải (Load Balancing): Web server này có khả năng phân phối lưu lượng truy cập đến nhiều máy chủ backend để tối ưu hóa hiệu suất và đảm bảo tính sẵn sàng của dịch vụ.
- Reverse Proxy: NGINX có thể hoạt động như một reverse proxy, chuyển tiếp các yêu cầu HTTP đến các máy chủ khác và trả về kết quả cho client.
- Cache HTTP: Web server này hỗ trợ bộ nhớ đệm (caching) các tài nguyên tĩnh và động, giúp giảm tải cho máy chủ và tăng tốc độ tải trang.
- Hỗ trợ SSL/TLS: NGINX hỗ trợ mã hóa SSL/TLS, giúp bảo vệ dữ liệu khi truyền tải giữa client và server.
- Tiết kiệm tài nguyên hệ thống: Web server này được tối ưu hóa để sử dụng ít dung lượng lưu trữ và CPU, giúp hoạt động ổn định và hiệu quả ngay cả khi số lượng kết nối rất lớn.
- Quản lý URL Rewrite: NGINX cho phép người quản trị dễ dàng thiết lập các quy tắc viết lại URL, hỗ trợ SEO và các yêu cầu khác.
- Hỗ trợ WebSocket: NGINX hỗ trợ giao thức WebSocket, giúp duy trì kết nối thời gian thực giữa client và server.
4.2. Tính năng của máy chủ Mail Proxy
NGINX cũng có thể hoạt động như một máy chủ mail proxy, cho phép định tuyến và bảo vệ lưu lượng email qua các giao thức IMAP, POP3 và SMTP. Các tính năng của máy chủ Mail Proxy NGINX bao gồm:
- Reverse Proxy cho IMAP/POP3: NGINX có thể làm reverse proxy cho các máy chủ email sử dụng giao thức IMAP và POP3, giúp chuyển tiếp các yêu cầu email đến các máy chủ mail backend.
- Cân bằng tải cho dịch vụ email: Tương tự như HTTP, NGINX có thể phân phối lưu lượng SMTP, IMAP và POP3 đến nhiều máy chủ để cải thiện khả năng mở rộng và khả năng chịu lỗi.
- Bảo mật và mã hóa: NGINX hỗ trợ SSL/TLS cho các giao thức email, bảo vệ dữ liệu gửi qua email khỏi các cuộc tấn công và đảm bảo tính bảo mật.
- Giảm tải cho máy chủ email backend: Bằng cách làm proxy, NGINX giảm tải cho các máy chủ email backend, giúp chúng tập trung vào xử lý các yêu cầu chính.
- Kiểm tra sức khỏe của máy chủ mail: NGINX có thể thực hiện các kiểm tra sức khỏe (health check) để đảm bảo các máy chủ email backend hoạt động bình thường, giúp cải thiện tính sẵn sàng và độ tin cậy của hệ thống email.
Xem thêm: Mail Server là gì? | Tổng hợp thông tin về Mail Server
5. Ưu và nhược điểm của Nginx
5.1. Ưu điểm
Web server này có các ưu điểm nổi bật như sau:
- Hiệu suất cao: NGINX có khả năng xử lý hàng nghìn kết nối đồng thời nhờ mô hình xử lý bất đồng bộ (asynchronous) và không đồng bộ (non-blocking). Nó được tối ưu hóa để xử lý các tệp tĩnh như HTML, CSS, JavaScript và hình ảnh nhanh hơn nhiều so với các máy chủ web truyền thống như Apache.
- Tiêu thụ tài nguyên thấp: Sử dụng ít RAM và CPU hơn so với các máy chủ web khác, giúp tiết kiệm tài nguyên hệ thống và cải thiện hiệu suất ngay cả trên các máy chủ cấu hình thấp.
- Cân bằng tải (Load Balancing): Web server này tích hợp sẵn tính năng cân bằng tải, giúp phân phối lưu lượng đến các máy chủ backend, giảm tải cho từng server và tăng tính sẵn sàng của hệ thống.
- Hỗ trợ reverse proxy: Đây là một giải pháp reverse proxy phổ biến, giúp ẩn máy chủ backend, cải thiện bảo mật và hiệu suất.
- Hỗ trợ SSL/TLS mạnh mẽ: Web server này hỗ trợ các giao thức bảo mật hiện đại như HTTP/2 và TLS 1.3, đảm bảo tốc độ và bảo mật trong truyền tải dữ liệu.
- Khả năng mở rộng linh hoạt: Dễ dàng cấu hình để mở rộng hệ thống, từ một máy chủ đơn giản đến một kiến trúc phức tạp gồm nhiều máy chủ backend.
- Caching hiệu quả: Tích hợp khả năng lưu trữ bộ nhớ đệm (cache) để tăng tốc tải trang và giảm tải cho backend.
- Hỗ trợ giao thức hiện đại: Web server này hỗ trợ WebSocket, HTTP/2, gRPC, và nhiều giao thức hiện đại khác, giúp đáp ứng nhu cầu của các ứng dụng web thời gian thực.
- Cộng đồng lớn và tài liệu phong phú: NGINX có một cộng đồng lớn với tài liệu hỗ trợ chi tiết, giúp dễ dàng tìm kiếm và giải quyết các vấn đề.
5.2. Nhược điểm
Tuy nhiên, Nginx cũng có một vài nhược điểm gây khó khăn cho người sử dụng:
- Cấu hình phức tạp: Việc cấu hình NGINX ban đầu có thể khó khăn đối với những người mới làm quen, vì tệp cấu hình sử dụng cú pháp riêng và yêu cầu hiểu rõ về các directive.
- Khả năng mở rộng tính năng hạn chế: So với Apache, NGINX có ít module tích hợp hơn và không hỗ trợ trực tiếp tải module bổ sung, điều này có thể hạn chế trong một số trường hợp cụ thể.
- Ghi log và xử lý lỗi: Quản lý log và xử lý lỗi trong NGINX không được trực quan như ở Apache, gây khó khăn khi debug hoặc phân tích sự cố.
- Hỗ trợ PHP qua FastCGI: Web server này không xử lý PHP trực tiếp mà phải thông qua FastCGI (thường là PHP-FPM), đòi hỏi thêm bước cấu hình và có thể gây khó khăn cho người mới.
- Thiếu tính tương thích với một số ứng dụng cũ: Một số ứng dụng cũ hoặc những ứng dụng được thiết kế cho Apache (dùng file .htaccess) có thể không hoạt động tốt với Web server này, yêu cầu chuyển đổi hoặc cấu hình lại.
- Quản lý và giám sát phức tạp hơn trong môi trường lớn: Trong các hệ thống lớn, việc giám sát hiệu suất hoặc các kết nối có thể trở nên phức tạp hơn do hạn chế của NGINX trong việc cung cấp thông tin chi tiết.
Xem thêm: AppServ là gì? Hướng dẫn cài đặt và sử dụng AppServ
6. Lợi ích của NGINX và NGINX Plus mang lại
Web server này mang lại nhiều lợi ích quan trọng cho các hệ thống web và ứng dụng mà ta có thể kể đến như:
- Hiệu suất cao: Xử lý hàng nghìn kết nối đồng thời với tốc độ nhanh, tối ưu hóa tài nguyên hệ thống.
- Bộ nhớ đệm hiệu quả: Sử dụng bộ nhớ đệm để tăng tốc độ truy cập đến các tập tin tĩnh và giảm áp lực lên máy chủ.
- Cân bằng tải: Phân phối đều khối lượng công việc giữa nhiều máy chủ, tối ưu hóa hiệu suất hệ thống.
- Reverse proxy: Đảm bảo bảo mật và hiệu suất khi chuyển hướng yêu cầu từ client đến server.
- SSL và TLS offloading: Xử lý mã hóa SSL/TLS để giảm gánh nặng cho máy chủ ứng dụng.
- WebSockets và HTTP/2 hỗ trợ: Thúc đẩy ứng dụng tương tác thời gian thực và cải thiện hiệu suất.
- Kiến trúc modular: Linh hoạt và dễ mở rộng với các module và plugin.
NGINX Plus bao gồm tất cả các lợi ích của NGINX cộng thêm các tính năng sau:
- Hỗ trợ chính thức và dịch vụ khách hàng: Nhận hỗ trợ kỹ thuật chính thức và các dịch vụ hỗ trợ từ đội ngũ chuyên gia.
- Cân bằng tải nâng cao: Cung cấp tính năng cân bằng tải nâng cao với giám sát sức khỏe máy chủ và cảnh báo.
- Quản lý và giám sát tốt hơn: Giao diện quản trị và giám sát đồ thị tốt hơn, cung cấp thông tin chi tiết và hiệu suất cao.
- Khả năng mở rộng linh hoạt: Tích hợp với nhiều giải pháp và môi trường khác nhau, từ cloud đến on-premises.
- Quản lý giấy phép và bảo mật mạnh mẽ: Cung cấp các tính năng an ninh và quản lý giấy phép để đảm bảo tính bảo mật và tuân thủ.
- Live Activity Monitoring: Theo dõi hoạt động trực tiếp để phát hiện và giải quyết vấn đề nhanh chóng.
- API Gateway và Load Balancing Layer 7: Hỗ trợ quản lý API và cân bằng tải ứng dụng ở mức lớp 7.
7. So sánh sự khác nhau giữa Apache Server và NGINX Server
7.1. Tương thích hệ điều hành
Apache:
- Tương thích rộng rãi với nhiều hệ điều hành như Linux, Windows, macOS.
- Thường được sử dụng trên các môi trường Linux như Apache2 trên Ubuntu, CentOS.
NGINX:
- Cũng tương thích với nhiều hệ điều hành, bao gồm Linux, Windows, macOS. Tuy nhiên, hiệu năng của NGINX trên HĐH Windows vẫn thật sự chưa tốt như trên các nền tảng khác.
- Đặc biệt được ưa chuộng trong môi trường Linux và thường đi kèm với các bản phân phối như NGINX trên Ubuntu, CentOS.
Xem thêm: Apache Tomcat là gì? | Cách cài đặt Apache Tomcat chi tiết
7.2. Cộng đồng người dùng lớn
Apache có lợi thế về thời gian tồn tại và kích thước cộng đồng, nhưng NGINX cũng đang có sự tăng trưởng mạnh mẽ.
Apache:
- Có một cộng đồng người dùng lớn và lâu dài.
- Có nhiều tài liệu và diễn đàn hỗ trợ trực tuyến.
NGINX:
- Cộng đồng người dùng đang ngày càng phát triển nhanh chóng.
- Có nhiều nguồn tài liệu và cộng đồng hỗ trợ.
7.3. Hiệu năng
NGINX thường có hiệu năng cao hơn trong môi trường có nhiều kết nối đồng thời, nhưng cả hai đều có thể được cấu hình để đáp ứng nhu cầu cụ thể của hệ thống.
Apache:
- Thông thường tốn nhiều tài nguyên hơn vì mỗi kết nối sẽ tạo một tiến trình mới.
- Hiệu năng có thể giảm khi có nhiều kết nối đồng thời.
NGINX:
- Sử dụng kiến trúc bất đồng bộ và event-driven, làm giảm tốn kém về tài nguyên.
- Hiệu năng cao, đặc biệt là trong việc xử lý nhiều kết nối đồng thời.
8. Hướng dẫn cách cài đặt NGINX dễ dàng
Việc cài đặt Web server này có thể được thực hiện qua hai phương thức sau:
Dùng gói (package) dựng sẵn:
- Cách này đơn giản và nhanh chóng hơn.
- Sử dụng các lệnh sau trên Debian:
sudo apt-get update
sudo apt-get install nginx
- Kiểm tra phiên bản NGINX đã cài đặt:
sudo nginx -v
- Kết quả sẽ là nginx version: nginx/1.18.2.
- Thư mục chính của Web Server là /etc/nginx/. Tệp tin quan trọng là nginx.conf và thư mục sites-available.
Cài đặt từ source:
- Cách này mang lại khả năng tùy chỉnh và cài đặt các module bổ sung.
- Cho phép người dùng điều chỉnh NGINX theo nhu cầu cụ thể của ứng dụng.
Cả hai phương thức đều có ưu điểm riêng, và sự chọn lựa phụ thuộc vào yêu cầu cụ thể của bạn.
9. Hướng dẫn cách cấu hình NGINX chi tiết
Cấu hình Web server này có thể được tùy chỉnh chi tiết thông qua tập tin nginx.conf. Dưới đây là một số điểm cần chú ý:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
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/*;
}
Trong tệp nginx.conf, có các thành phần quan trọng như worker_processes để xác định số worker processes, worker_connections là số lượng kết nối tối đa mỗi worker process có thể xử lý, và các cài đặt khác như log, gzip, v.v.
Tập tin này thường được cấu trúc linh hoạt với các ngữ cảnh như events và http. Có thể tận dụng các thiết lập mặc định hoặc tùy chỉnh chúng theo nhu cầu.
Các trang web được định nghĩa trong thư mục sites-available, và để kích hoạt chúng, ta tạo symlink tới thư mục sites-enabled. Mỗi trang web có thể được cấu hình trong một file riêng biệt.
Ví dụ cấu hình cho một trang web như sau:
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 { 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ư file nginx.conf, nó cũng sử dụng việc định nghĩa các ngữ cảnh lồng nhau (đồng thời, mọi thứ cũng lồng trong ngữ cảnh HTTP của nginx.conf, vì vậy chúng thừa hưởng tất cả từ đó).
Ngữ cảnh server xác định một máy chủ ảo để xử lý tất cả các yêu cầu từ phía client. Có nhiều khối server, và Web server này sẽ lựa chọn trong số chúng dựa trên các chỉ thị listen và server_name.
Ở mỗi khối server, chúng ta xác định nhiều ngữ cảnh location để quyết định cách xử lý các yêu cầu từ client. Khi có yêu cầu, Web server này sẽ thử khớp URI với các định nghĩa location và xử lý theo cách phù hợp nhất.
Trong ngữ cảnh location, có nhiều chỉ thị quan trọng được sử dụng, như:
- try_files: Phục vụ các tệp tĩnh được tìm thấy trong thư mục được chỉ định bởi chỉ thị gốc.
- proxy_pass: Chuyển tiếp yêu cầu đến một máy chủ proxy được xác định.
- rewrite: Viết lại URI thông qua một biểu thức chính quy để đạt được khớp với một ngữ cảnh location có thể xử lý nó.
Ngữ cảnh upstream định nghĩa một nhóm server mà Web server này sẽ ủy quyền các yêu cầu tới. Sau khi tạo khối upstream và xác định server trong đó, chúng có thể được xác nhận thông qua tên nằm trong các khối location.
Ngoài ra, một ngữ cảnh upstream có thể chứa nhiều server được gán tại đó vì Web server này sẽ thực hiện load balancing khi ủy quyền các yêu cầu tới.
10. Hướng dẫn cách cấu hình HTTPS trong NGINX
Để cấu hình HTTPS trong NGINX, bạn cần thực hiện các bước sau:
Chuẩn bị chứng chỉ SSL:
- Đầu tiên, bạn cần có một chứng chỉ SSL từ một tổ chức chứng nhận đáng tin cậy hoặc có thể tự ký một chứng chỉ sử dụng OpenSSL.
- Có hai phần chính trong chứng chỉ SSL: khóa riêng và chứng chỉ công cộng. Đảm bảo bạn đã lưu trữ chúng an toàn và có thể truy cập.
Cấu hình file nginx.conf hoặc cấu hình cụ thể trang web:
- Mở file cấu hình chính của NGINX, thường là /etc/nginx/nginx.conf, hoặc mở file cấu hình cụ thể cho trang web, thường là trong thư mục /etc/nginx/sites-available/.
- Thêm các phần cấu hình SSL vào trong khối server:
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/your/certificate.crt; ssl_certificate_key /path/to/your/private-key.key; # Cấu hình các tùy chọn bảo mật khác tại đây }
Kiểm tra cấu hình:
- Chạy lệnh nginx -t để kiểm tra cú pháp của cấu hình Web server này. Nếu mọi thứ đúng, bạn sẽ nhận được thông báo “syntax is okay” và “test is successful“.
- Nếu có lỗi, hãy kiểm tra lỗi và sửa chúng trước khi tiếp tục.
Khởi động lại:
Sau khi kiểm tra cấu hình, hãy khởi động lại Web server này để áp dụng thay đổi. Sử dụng lệnh:
sudo service nginx restart
Mở cổng 443 trên firewall:
Đảm bảo rằng bạn đã mở cổng 443 trên firewall để cho phép kết nối HTTPS.
Kiểm tra trang web với https:
- Mở trình duyệt và truy cập trang web của bạn với đường dẫn https://example.com. Nếu mọi thứ diễn ra đúng, bạn sẽ thấy biểu tượng mô hình khóa trong thanh địa chỉ.
- Bạn có thể cải thiện bảo mật bằng cách thêm các tùy chọn bảo mật như HSTS, cấu hình ciphers, và một số tùy chọn khác trong phần cấu hình SSL của Web server này.
11. Hướng dẫn cách khởi động NGINX
Khởi động Web server này là một quá trình đơn giản, sau khi bạn đã hoàn thành cấu hình và đưa ứng dụng website đến thư mục tương ứng. Để bắt đầu sử dụng, bạn có thể sử dụng lệnh sau:
sudo systemctl start nginx
Trong trường hợp bạn cần thay đổi cấu hình mà không muốn có thời gian downtime, bạn có thể thực hiện quá trình tải lại như sau:
sudo systemctl reload nginx
Cuối cùng, để kiểm tra trạng thái của NGINX, bạn có thể sử dụng lệnh:
sudo systemctl status nginx
Như vậy, bạn có thể quản lý và theo dõi trạng thái của NGINX một cách thuận tiện.
12. Hướng dẫn cách sử dụng NGINX để Load Balancer
- Bước 1: Cấu hình trên máy có địa chỉ IP là 10.10.10.1 như sau:
upstream proserver { server 10.10.10.9:9002; server 10.10.10.10:9002; }
Ở đây, hai máy chủ có địa chỉ IP là 10.10.10.9 và 10.10.10.10 đang chạy dịch vụ ở cổng 9002.
- Bước 2: Thiết lập cấu hình để máy có địa chỉ IP là 10.101.10.1 lắng nghe ở cổng 9000 như sau:
server { proxy_buffering off; client_max_body_size 5M; listen 9000; location / { proxy_pass http://proserver; } }
- Bước 3: Khởi động Web server này bằng lệnh: sudo service nginx restart
- Bước 4: Sửa lại cấu hình với tham số weight như sau:
upstream proserver { server 10.10.10.9:9002 weight=1; server 10.10.10.10:9002 weight=2; }
Lưu ý: Các bước trên giúp bạn cấu hình NGINX để thực hiện Load Balancer. Nếu bạn muốn điều chỉnh trọng số của máy chủ trong quá trình cân bằng tải, bạn có thể sử dụng tham số “weight” như trong Bước 4 để gán trọng số khác nhau cho các máy chủ.
13. Hướng dẫn cách kiểm tra NGINX trên Website
Để kiểm tra trạng thái của NGINX trên một website, bạn có thể thực hiện các bước sau:
Kiểm tra trạng thái hoạt động:
Sử dụng lệnh sau để kiểm tra xem Web server này có đang hoạt động không:
sudo service nginx status
Kiểm tra log file:
Mở các file log để kiểm tra thông tin về trạng thái và lỗi. Thông thường, file log sẽ nằm ở đường dẫn /var/log/nginx/:
sudo tail -f /var/log/nginx/error.log
Kiểm tra cổng nghe:
Đảm bảo rằng Web server này đang lắng nghe cổng mà bạn mong đợi, thường là cổng 80 cho HTTP và 443 cho HTTPS. Bạn có thể sử dụng lệnh sau:
sudo netstat -tuln | grep -E '80|443'
Kiểm tra cấu hình:
Kiểm tra xem cấu hình có đúng không bằng cách chạy lệnh sau:
sudo nginx -t
Kiểm tra trang web:
Mở trình duyệt và truy cập trang web của bạn để đảm bảo rằng Web server này phản hồi đúng. Những bước trên sẽ giúp bạn kiểm tra và theo dõi trạng thái của NGINX trên website của bạn.
14. Hướng dẫn cách sử dụng NGINX hiệu quả nhất
14.1. Loại bỏ limitation ở tầng kernel
Để Web server này hoạt động hiệu quả, cần tối ưu hóa cấu hình hệ điều hành (OS) ở tầng kernel nhằm loại bỏ các giới hạn mặc định. Một số bước tối ưu phổ biến bao gồm:
Tăng giới hạn số lượng tệp mô tả (file descriptors):
Chỉnh sửa tệp /etc/security/limits.conf hoặc /etc/security/limits.d/:
* soft nofile 65535
* hard nofile 65535
Thêm cấu hình tương tự vào tệp /etc/systemd/system.conf hoặc /etc/systemd/user.conf:
DefaultLimitNOFILE=65535
Tăng kích thước hàng đợi kết nối (backlog):
Chỉnh sửa /etc/sysctl.conf:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
Áp dụng thay đổi:
sudo sysctl -p
Kích hoạt chế độ xử lý nhanh (epoll):
Web server này tự động hỗ trợ epoll trên Linux, nhưng bạn nên đảm bảo rằng worker_processes và worker_connections được cấu hình tối ưu trong tệp cấu hình NGINX:
worker_processes auto;
events {
worker_connections 10240;
use epoll;
}
Tăng giới hạn bộ đệm (buffer):
Thêm vào tệp /etc/sysctl.conf:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
14.2. Phân tích access log nginx để tìm bottleneck
Access log của NGINX giúp theo dõi các yêu cầu, từ đó phát hiện các điểm nghẽn (bottleneck) trong hệ thống. Thực hiện các bước sau để phân tích:
Kích hoạt access log trong cấu hình NGINX:
Kiểm tra tệp cấu hình:
access_log /var/log/nginx/access.log;
Sử dụng lệnh awk để phân tích:
Ví dụ, thống kê các URL có lượt truy cập cao nhất:
awk ‘{print $7}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
Phân tích thời gian phản hồi:
Nếu bạn đã cấu hình log_format để ghi nhận thời gian phản hồi ($request_time), hãy tìm các yêu cầu chậm nhất:
awk ‘{print $NF, $7}’ /var/log/nginx/access.log | sort -nr | head -10
Sử dụng công cụ chuyên dụng:
Dùng GoAccess hoặc ELK Stack (Elasticsearch, Logstash, Kibana) để phân tích và trực quan hóa log một cách chi tiết.
14.3. Cấu hình cache trên Nginx
Caching giúp tăng tốc độ tải trang và giảm tải cho máy chủ backend. Thực hiện theo các bước sau:
Kích hoạt caching trong tệp cấu hình NGINX:
Xác định thư mục cache:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
Áp dụng cấu hình cache:
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
Làm mới cache khi cần thiết:
Xóa cache thủ công:
sudo rm -rf /var/cache/nginx/*
Xác định nội dung không cache, đặt quy tắc loại trừ:
location /no-cache {
proxy_no_cache 1;
proxy_cache_bypass 1;
}
14.4. Keepalive trên nginx
Keepalive giúp duy trì kết nối lâu dài giữa NGINX và backend, giảm thời gian tạo lại kết nối. Cách kích hoạt keepalive như sau:
Kích hoạt keepalive cho backend:
Trong phần cấu hình upstream:
upstream backend {
server 127.0.0.1:8080;
keepalive 32;
}
Cấu hình keepalive_timeout:
Thêm vào tệp cấu hình server:
keepalive_timeout 65;
Kiểm tra trạng thái keepalive:
Dùng công cụ netstat hoặc tcpdump để kiểm tra số lượng kết nối được giữ lại.
Tối ưu số lượng worker và kết nối:
Đảm bảo worker_connections đủ lớn để hỗ trợ nhiều kết nối giữ lâu:
events {
worker_connections 10240;
}
15. Một số câu hỏi liên quan đến Nginx
Dưới đây là một số câu hỏi về Web server này mà có thể bạn sẽ quan tâm.
15.1. Web server là gì?
Web server là một phần mềm hoặc phần cứng chịu trách nhiệm xử lý và phân phối các tài nguyên web (như HTML, CSS, JavaScript, hình ảnh) tới người dùng thông qua giao thức HTTP/HTTPS. Khi một trình duyệt (client) gửi yêu cầu (request) đến web server, nó sẽ xử lý yêu cầu và trả về nội dung phù hợp, ví dụ: một trang web hoặc tài nguyên tải về.
Ví dụ về các web server phổ biến:
- NGINX (hiệu suất cao, hỗ trợ đồng thời tốt).
- Apache (linh hoạt, phổ biến).
- LiteSpeed (nhanh, tối ưu hóa).
15.2. Upstream NGINX là gì?
Upstream trong NGINX là một khái niệm dùng để chỉ tập hợp các máy chủ backend xử lý các yêu cầu từ NGINX. Thông thường, Web server này đóng vai trò như một reverse proxy và chuyển tiếp yêu cầu đến một nhóm máy chủ ứng dụng (backend), chẳng hạn như máy chủ xử lý PHP, Python hoặc Node.js.
Cấu hình upstream trong NGINX:
upstream backend_servers {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
location / {
proxy_pass http://backend_servers;
}
}
Tính năng của Upstream:
- Cân bằng tải (Load Balancing): Phân phối lưu lượng đến các máy chủ backend.
- Kiểm tra trạng thái (Health Check): Tự động bỏ qua máy chủ bị lỗi.
15.3. NGINX reverse proxy là gì?
NGINX reverse proxy là một tính năng của NGINX cho phép nó hoạt động như một cầu nối giữa client và máy chủ backend. Thay vì kết nối trực tiếp với backend, client gửi yêu cầu đến NGINX, và NGINX sẽ chuyển tiếp yêu cầu đến máy chủ backend thích hợp.
Lợi ích của reverse proxy:
- Cải thiện hiệu suất: Nhờ caching, nén dữ liệu và giảm tải cho backend.
- Bảo mật: Ẩn thông tin backend, hạn chế các cuộc tấn công trực tiếp.
- Cân bằng tải: Phân phối lưu lượng đến nhiều máy chủ backend.
- Đơn giản hóa cấu hình SSL/TLS: Quản lý mã hóa tập trung tại NGINX.
Ví dụ cấu hình reverse proxy trong NGINX:
server {
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
15.4. Lỗi NGINX là gì?
Lỗi NGINX xảy ra khi có sự cố trong quá trình xử lý yêu cầu hoặc cấu hình. Một số lỗi thường gặp bao gồm:
502 Bad Gateway
- Nguyên nhân: Backend server không phản hồi hoặc bị lỗi. Hoặc kết nối giữa NGINX và backend bị gián đoạn.
- Cách khắc phục: Kiểm tra trạng thái backend và xác minh cấu hình proxy_pass.
504 Gateway Timeout
- Nguyên nhân: Backend mất quá nhiều thời gian để phản hồi.
- Cách khắc phục: Tăng giá trị proxy_read_timeout trong cấu hình.
403 Forbidden
- Nguyên nhân: Không có quyền truy cập vào tài nguyên.
- Cách khắc phục: Kiểm tra quyền trên thư mục hoặc tệp bị chặn. Kiểm tra cấu hình location trong NGINX.
- Nguyên nhân: Tệp hoặc tài nguyên không tồn tại.
- Cách khắc phục: Xác minh đường dẫn tệp trong cấu hình. Kiểm tra xem tài nguyên đã được tải lên chính xác chưa.
Lỗi cấu hình (Syntax error)
- Nguyên nhân: Sai cú pháp trong tệp cấu hình.
- Cách khắc phục: Kiểm tra tệp cấu hình bằng lệnh: nginx -t. Sửa lỗi và reload NGINX: sudo systemctl reload nginx
Xem thêm: Lỗi 500 Internal Server Error Là Gì? Cách Khắc Phục Lỗi 500, 501, 502
16. Tổng kết
Qua bài viết “NGINX là gì? Cách Cài đặt, Cấu hình & Sử dụng“, ta có thể thấy Web server này không chỉ là một giải pháp webserver đơn thuần mà chính là chìa khóa giúp tối ưu hiệu suất website và quản lý cân bằng tải. Khả năng xử lý tải lớn, cân bằng tải linh hoạt và các tính năng đa dạng đã giúp Web server này trở thành lựa chọn hàng đầu cho các nhà phát triển và quản trị hệ thống.
Nếu bạn đang sử dụng dịch vụ Hosting giá rẻ, Hosting NVMe, Business Hosting của VinaHost và đang cần hỗ trợ cài đặt, cấu hình hoặc sửa các lỗi NGINX thường gặp như như Bad gateway 502, hãy liên hệ ngay với đội ngũ kỹ thuật của VinaHost qua email support@vinahost.vn nhé!
Bạn có thể xem thêm các bài viết thú vị khác tại đây và đừng ngại ngần liên hệ với VinaHost nếu cần hỗ trợ nhé:
- Email: support@vinahost.vn
- Hotline: 1900 6046
- Livechat: https://livechat.vinahost.vn/chat.php
Tham khảo các dịch vụ của VinaHost để ứng dụng vào hoạt động kinh doanh của bạn nhé:
XAMPP là gì? | Hướng dẫn Cài đặt & Sử dụng XAMPP
Webhook là gì? Tìm hiểu Webhook chi tiết A-Z