NGINX là gì?
NGINX là một máy chủ web mã nguồn mở mạnh mẽ. Nginx sử dụng kiến trúc đơn luồng và hướng sự kiện, vì vậy nó hiệu quả hơn Apache server. Ngoài ra, nó còn có khả năng thực hiện những tính năng quan trọng khác như cân bằng tải, caching HTTP, hoặc sử dụng như một reverse proxy. Nginx là một kiến thức không thể thiếu đối với các nhà phát triển web, quản trị hệ thống hoặc devops.
Các mốc ra đời và phát triển của Nginx
Vào 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, Hoa Kỳ.
Nginx có những tính năng gì?
Những tính năng của máy chủ HTTP Nginx
- Có khả năng xử lý hơn 10.000 kết nối đồng thời với tài nguyên bộ nhớ thấp.
- Phục vụ tập tin tĩnh (static files) và tạo chỉ mục tập tin.
- Tăng tốc reverse proxy bằng bộ nhớ cache, phân phối tải đơn giản và khả năng chịu lỗi.
- Hỗ trợ tăng tốc với bộ nhớ cache của FastCGI, uwsgi, SCGI và máy chủ memcached.
- Kiến trúc linh hoạt, tăng tốc nạp trang bằng nén gzip tự động.
- Hỗ trợ mã hóa SSL và TLS.
- Cấu hình linh hoạt; ghi nhật ký truy cập.
- Chuyển hướng lỗi 3XX-5XX.
- Rewrite URL (URL rewriting) bằng regular expressions.
- Giới hạn tỷ lệ đáp ứng yêu cầu.
- Hạn chế số kết nối đồng thời hoặc yêu cầu từ một địa chỉ.
- Có 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 tệp FLV và MP4.
Những tính năng của 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.
Cài đặt Nginx
Có hai cách để cài đặt Nginx, bạn có thể sử dụng gói cài đặt sẵn hoặc cài đặt từ mã nguồn.
Phương pháp đầu tiên dễ dàng và nhanh chóng hơn, nhưng cài đặt từ mã nguồn cung cấp khả năng cài đặt các module phụ trợ khác để làm cho Nginx mạnh mẽ hơn. Điều này cho phép tùy chỉnh Nginx phù hợp với nhu cầu của ứng dụng của bạn.
Để cài đặt gói Nginx trên Debian, bạn chỉ cần làm như sau:
sudo apt-get update
sudo apt-get install nginx
Sau khi quá trình cài đặt hoàn tất, bạn có thể kiểm tra xem mọi thứ có ổn không bằng cách chạy lệnh sau, nó sẽ hiển thị phiên bản của Nginx đã được cài đặt:
sudo nginx -v
nginx version: nginx/1.18.2
Xem thêm : Chứng quyền là gì? Góc nhìn toàn cảnh trước khi đầu tư
Máy chủ web mới sẽ được cài đặt tại /etc/nginx/. Nếu bạn mở thư mục này, bạn sẽ thấy nhiều tệp tin và thư mục. Nhưng điều quan trọng là tệp tin nginx.conf và thư mục sites-available.
Cấu hình Nginx
Thiết lập quan trọng nhất nằm trong tệp tin nginx.conf, mặc định nội dung của nó như sau:
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/*;
}
Tệp tin được cấu trúc thành các ngữ cảnh. Ngữ cảnh đầu tiên là events, sau đó là http. Cấu trúc này có một số lợi ích trong việc cấu hình, vì mỗi ngữ cảnh có thể lồng trong ngữ cảnh khác, chúng kế thừa tất cả các thiết lập từ ngữ cảnh cha của nó nhưng cũng có thể ghi đè lên những thiết lập nếu cần.
Nhiều phần trong tệp tin cấu hình có thể được tinh chỉnh dựa trên nhu cầu của bạn, tuy nhiên 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 trong tệp tin cấu hình này bao gồm:
- worker_processes: Thiết lập này xác định số lượng processes mà Nginx sử dụng. Vì Nginx là đơn luồng, thường số lượng processes sẽ bằng số lõi CPU.
- worker_connections: Đây là số lượng tối đa kết nối đồng thời cho mỗi worker process. Chỉ thị này quyết định số lượng client mà Nginx có thể phục vụ đồng thời.
- access_log & error_log: Đó là nơi Nginx sẽ ghi log các lỗi và số lượng truy cập. Những bản ghi này thường được sử dụng để sửa lỗi và tối ưu hóa hệ thống.
- gzip: Đây là các thiết lập nén gzip cho phần response của Nginx. Tính năng này có một số tham số phụ, thiết lập mặc định đã được comment đi nhưng có thể giúp cải thiện hiệu suất đáng kể. Trong số các tham số phụ của GZIP, bạn có thể chú ý đến gzip_comp_level, đây là mức độ nén và có giá trị từ 1 đến 10. Thông thường, giá trị này không nên vượt quá 6 – trên mức này, lợi ích từ việc nén không đáng kể, vì nó sẽ tốn nhiều tài nguyên CPU hơn. gzip_types là danh sách các kiểu response sẽ được nén.
Nginx có thể hỗ trợ nhiều website, và các tệp tin định nghĩa các trang web của bạn được lưu trong thư mục /etc/nginx/sites-available.
Tuy nhiên, các tệp tin trong thư mục này không “sống” – bạn có thể có nhiều tệp tin định nghĩa trang web ở đây, nhưng Nginx sẽ không thực sự xử lý chúng cho đến khi chúng được tạo liên kết đến thư mục /etc/nginx/sites-enabled (bạn cũng có thể sao chép chúng vào thư mục này, nhưng việc liên kết đảm bảo rằng chỉ có một bản sao của mỗi tệp tin được theo dõi).
Điều này cho phép bạn nhanh chóng đưa các trang web trực tuyến hoặc offline mà không cần xóa bất kỳ tệp tin nào – khi bạn sẵn sàng cho một trang web trực tuyến, hãy tạo liên kết đến sites-enabled và khởi động lại Nginx.
Thư mục sites-available bao gồm các cấu hình cho các trang web ảo (virtual host). Nó cho phép máy chủ web 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 này không hoạt động trừ khi chúng được liên kết đến thư mục sites-enabled.
Xem thêm : Tổ chức IASB là gì? Hội đồng Chuẩn mực Kế toán Quốc tế
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 có thể có nội dung như sau:
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 {
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://;
}
}
Tương tự như file nginx.conf, tệp tin cấu hình này cũng sử dụng khái niệm các ngữ cảnh lồng nhau (và tất cả cũng đều nằm trong ngữ cảnh http của nginx.conf, vì vậy cũng kế thừa tất cả các thiết lập của nó).
Ngữ cảnh server định nghĩa một máy chủ ảo để xử lý các yêu cầu từ khách hàng 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 chỉ thị listen và server_name.
Trong mỗi khối server, chúng ta lại định nghĩa nhiều ngữ cảnh location được sử dụng để quyết định cách xử lý các yêu cầu từ khách hàng. Mỗi khi một yêu cầu được gửi đến, Nginx sẽ so khớp URI với các định nghĩa location và xử lý nó dựa trên sự khớp.
Có nhiều chỉ thị quan trọng có thể được sử dụng trong ngữ cảnh location, bao gồm:
- try_files: Chỉ thị này sẽ cố gắng phục vụ các tệp tin tĩnh được tìm thấy trong thư mục gốc mà bạn định nghĩa.
- proxy_pass: Chỉ thị này sẽ chuyển tiếp yêu cầu đến một máy chủ proxy cụ thể.
- rewrite: Chỉ thị này sẽ viết lại URI dựa trên một biểu thức chính quy để một khối location khác có thể xử lý nó.
Ngữ cảnh upstream định nghĩa một nhóm các máy chủ mà Nginx sẽ chuyển tiếp yêu cầu tới. Sau khi chúng ta tạo một ngữ cảnh upstream và định nghĩa các máy chủ bên trong nó, chúng ta có thể tham chiếu đến nó bằng tên trong các khối location của mình. Hơn nữa, một ngữ cảnh upstream có thể chứa nhiều máy chủ để thực hiện cân bằng tải khi chuyển tiếp yêu cầu.
Khởi động Nginx
Sau khi chúng ta hoàn tất cấu hình và di chuyển ứng dụng web vào thư mục tương ứng, chúng ta có thể khởi động Nginx bằng lệnh sau: sudo service nginx start
Sau đó, mỗi khi chúng ta thay đổi cấu hình, chúng ta chỉ cần nạp lại (mà không có thời gian chết) bằng lệnh: service nginx reload Cuối cùng, chúng ta có thể kiểm tra trạng thái của Nginx bằng lệnh sau: service nginx status
Xem thêm vị trí tuyển dụng trong lĩnh vực Công nghệ thông tin trên Topdev