NGINX là gì? Tìm hiểu chi tiết cách kiểm tra và cài đặt phần mềm này

nginx

NGINX là gì? Cách hoạt động của nó như thế nào?

NGINX, đọc là “engine-ex,”  là một phần mềm web server mã nguồn mở nổi tiếng. Ban đầu nó dùng để phục vụ web HTTP. Tuy nhiên, ngày nay nó cũng được dùng làm reverse proxy, HTTP load balancer và email proxy như IMAP, POP3, và SMTP.

NGINX xuất bản chính thức vào tháng 10 năm 2004. Nhà sáng lập của phần mềm này là Igor Sysoev, triển khai dự án từ năm 2002 để giải quyết vấn đề C10k. C10k là giới hạn của việc xử lý 10 ngàn kết nối cùng lúc. Ngày nay, có nhiều web server còn phải chịu nhiều kết nối hơn vậy để xử lý. NGIN.X sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Tính năng này khiến NGIN.X server trở nên đáng tin cậy, tốc độ và khả năng mở rộng lớn nhất.
Vì khả năng mạnh mẽ, và để có thể xử lý hàng ngàn kết nối cùng lúc, nhiều website có traffic lớn đã sử dụng dịch vụ NGIN.X. Một vài trong số những ông lớn công nghệ dùng nó là Google, Netflix, Adobe, Cloudflare, WordPress, và còn nhiều hơn nữa.

NGINX hoạt động như thế nào?

Trước khi học về NGIN.X, chúng ta cần biết cách web server hoạt động thế nào đã. Ví dụ như, 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 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). NGIN.X 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 đó.
Đ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, NGIN.X 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 phần mềm này tỏ ra hiệu quả hơn khi hoạt động trên môi trường thương mại điện tử, trình tìm kiếm, và cloud storage.

Các tính năng của phần mềm mã nguồn mở này là gì?

Tại sao nên sử dụng NGIN.X? Để trả lời câu hỏi này ta có thể kể đến các tính năng vượt trội của phần mềm này như sau:
  • Có thể 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 proxy ngược 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; Xem thêm bài viết IPv6 là gì?
  • Hỗ trợ WebSockets;
  • Hỗ trợ truyền tải file FLV và MP4.

Khác biệt giữa Apache Server và NGINX server là gì? Cái nào tốt hơn?

1. Apache là gì?

Apache là một trong các Webserver đơn giản nhất và phổ thông nhất để phát triển các dự án website, và từ 1996 Apache trở thành phần mềm webserver phổ biến nhất thế giới, và cho tới năm 2009 Apache đã chiếm 46 % tổng số website chạy trên nền tảng của nó.
Từ tháng 4 năm 1996, Apache trở thành một chương trình máy chủ HTTP thông dụng nhất. Hơn nữa, Apache thường được dùng để so sánh với các phần mềm khác có chức năng tương tự. Tính đến tháng 1 năm 2007 thì Apache chiếm đến 60% thị trường các chương trình phân phối trang web.

2. Nginx hay Apache cái nào tốt hơn ?

Cơ chế hoạt động của hai Web Server này cũng khác nhau tạo nên hai đặc điểm và ưu thế khác nhau, ví dụ Ngin.x có tất cả các chức năng mà Apache có:
  • Static file serving.
  • SSL/TLS support.
  • Virtual hosts.
  • Reverse proxying.
  • Load balancing.
  • Compression.
  • Access controls.
  • URL rewriting.
  • Custom logging.
  • Server-side includes.
  • Limited WebDAV.
  • FLV streaming.
  • FastCGI.
Trong khi đó Apache lại có những chức năng mở rộng hơn so với Ngin.x như sau:
  • digest access authentication
  • CGI
  • administrative console
  • .htaccess
Có một điều làm cho Ngin.x ít phổ thông hơn so với Apache chính là: Ngin.x chỉ thích hợp cho việc phục vụ các Server riêng, chứ không thích hợp cho Shared Hosting, với mỗi lần cấu hình Ngin.x lại phải load lại file config của nó trên server, người dùng nếu có quyền này chắc chắn dễ dàng làm chết cả server với hàng trăm website cùng nhau chạy.
Nginx tỏ ra ưu thế hơn hẳn Apache về tốc độ và sử dụng bộ nhớ của máy chủ, WordPress.org cũng đã có một cuộc thí nghiệm của riêng mình để đánh giá việc này, Ngin.x hoạt động tuyệt vời với 8000 request / giây ( )
Điều đặc biệt là Ngin.x dùng rất ít Ram và CPU, trong một cuộc thí nghiệm, Ngin.x ăn hết 25Mb Ram và 10% CPU load với 10 triệu lượt truy cập / ngày, không thể tưởng tượng được !
Apache và Ngin.x đều miễn phí, hoạt động và phát triển dưới các giấy phép mã nguồn mở, copyfree nên bạn không phải trả phí khi cài đặt chúng.
Theo Semtek Co,. lTD thì chọn Ngin.x cho server của mình cài đặt Ngin.x, PHP-FPM, MySQL thì sẽ là một lựa chọn tốt nhất. Ngin.x có thể được sử dụng trên VPS cấu hình từ thấp nhất đến cao nhất của Semtek Co,. lTD hoặc đến một hệ thống rộng lớn như cloud server với nhiều clusters.

Hướng dẫn chi tiết cách kiểm tra và cài đặt phần mềm này

1. Hướng dẫn kiểm tra NGIN.X của Website

Bạn có thể kiếm tra website có chạy NGIN.X hay không nhờ vào HTTP header. Bạn có thể sử dụng network tab trong Chrome Devtools để thấy HTTP header. Đối với các bạn chưa biết thì thao tác như sau:
  • Bạn mở trang cần kiểm tra trên Chrome
  • Nhấn tổ hợp phím Ctrl + Shift + I hoặc F12
  • Cửa sổ Chrome Devtools hiện lên
  • Tại đây nếu không thấy Network tab, bạn nhấp vào ” >> ” để thấy phần mở rộng của tabs và chọn Network.
  • Ngoài ra, bạn cũng có thể sử dụng Pingdom hoặc GTmetrix.

2. Hướng dẫn cài đặt NGINX Web server

Bước 1: Cài đặt bằng lệnh Yum
Sử dụng lệnh “yum install nginx -y”, start device bằng lệnh “service nginx start”
Bước 2: Cài đặt Source
  • Cài đặt các package cần thiết, sử dụng các lệnh như sau:
yum groupinstall ” Development Tools”  -y
yum install zlib-devel pcre-devel openssl-devel -y
yum install epel-release -y
  • Cài đặt thêm các thành phần phụ thuộc của NGIN.X bằng lệnh:
yum install perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel –y
  • Download source NGIN.X tại:
  • Giải nén và truy cập đường dẫn source NGINX vừa giải nén.
  • Config từ script bằng lệnh:
./configure –prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –error-log-path=/var/log/nginx/error.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –user=nginx –group=nginx
make
make install
  • Tạo user và phân quyền thư mục:
useradd nginx
chown -R nginx:nginx /etc/nginx/
  • Tạo file để chạy lệnh:
cat >> /usr/lib/systemd/system/nginx.service << “EOF”
[Unit]
Description=nginx – high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
EOF
  • Start Service NGINX
systemctl start nginx
systemctl enable nginx
  • Truy cập vào đường dẫn chứa file config của NGINX
cd /etc/nginx/conf
  • Backup lại file NGINX.conf
mv nginx.conf nginx.conf.bak
  • Sửa file cấu hình NGINX
cat >> nginx.conf << “EOF”
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                     ‘”$http_user_agent” “$http_x_forwarded_for”‘;
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}
EOF
  • Tạo thư mục chứa các file cấu hình virtualhost cho các website
mkdir -p /etc/nginx/conf.d/
Bước 3: Tiến hành cài đặt php
  • Sử dụng lệnh:
yum install -y php-common php-bcmath php-cli php-devel php-mcrypt php-mysql php-password-compat php-pclzip php-pdo php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-dba php-embedded php-enchant php-mbstring php-intl libssh2 php-pecl-ssh2 php-pecl-memcached php-pecl-memcache php-fpm
  • Cấu hình php-fpm
sed -i ‘s/user = apache/user = nginx/’g /etc/php-fpm.d/www.conf
sed -i ‘s/group = apache/group = nginx/’g /etc/php-fpm.d/www.conf
service php-fpm restart
  • Truy cập vào đường dẫn chứa code chung của các website và tạo thư mục riêng chứa code của website, ví dụ: example.com
cd /var/www/html
mkdir example.com
  • Truy cập đường dẫn chứa các file cấu hình của virtualhost
 cd /etc/nginx/conf.d/
  • Backup file cấu hình default
mv default.conf default.conf.bak
  • Tạo virtualhost trong NGIN.X
cat >> example.com.conf << “EOF”
    listen       80;
    server_name  example.com;
location / {
        root   /var/www/html/example.com;
        index  index.html index.php index.htm;
    }
location ~ \.php$ {
        root           /var/www/html/example.com;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
EOF
  • Restart lại service NGIN.X
service nginx restart

Cách khắc phục lỗi 502 Bad Gateway cho người quản trị web

Bạn cần xác định rõ nguyên nhân dẫn đến lỗi 502. Với các trường hợp gây nên lỗi khác nhau chúng ta có cách xử lý như sau:

1. Lỗi 502 do cấu hình buffering/timeout chưa tốt

Khi bạn gặp lỗi 502 Bad Gateway trên Ngin.x thì việc đầu tiên là bạn phải coi file log của Ngin.x trên VPS, thông thường sẽ nằm tại “/var/log/nginx/error.log”
Khi bạn mở file log ra và kéo xuống dưới cùng sẽ thấy có đoạn báo lỗi tương tự như sau “…upstream sent too big header while reading response header from upstream…” .
Nguyên nhân của lỗi này là do dữ liệu trả về từ PHP-FPM cho Ngin.x vượt mức giới hạn, do đó bạn cần tăng giới hạn này lên bằng cách thêm 2 dòng sau vào block http {…} của file cấu hình “/etc/nginx/nginx.conf” như sau :
http {
#…
fastcgi_buffers 64 64k;
fastcgi_buffer_size 64k;
#…
}
Fastcgi Buffer là cách Ngin.x xử lý dữ liệu trả về từ PHP-FPM để lưu trong bộ nhớ RAM nhằm tăng tốc quá trình xử lý, giá trị của Fastcgi Buffer tuỳ thuộc vào bộ nhớ RAM VPS/Server của bạn.
Sau đó bạn lưu lại file cấu hình của Ngin.x và khởi động lại Ngin.x bằng lệnh sau trên CentOS :
service nginx restart

2. Lỗi 502 do sử dụng Ngin.x chạy như một proxy cache cho máy chủ Apache

Trong trường hợp này, gateway là apache. Khi bạn sử dụng Ngin.x làm proxy cho Apache, nếu Apache die hay nó không được cấu hình tốt, nó có thể là gây là lỗi 502.
Để sửa lỗi 502 trong trường hợp này bạn chỉ cần khởi động lại Apache web server là được, tuy nhiên bạn phải kiểm tra file logs để biết nguyên nhân chính xác gây ra lỗi này.
nginx

3. Lỗi 502 do Ngin.x đang chạy cùng php-fpm

Nguyên nhân do php bị ngừng hoạt động hoặc nó bị quá tải khi xử lý các request. PHP-FPM hoạt động không chính xác và không thể xử lý tất cả các request từ Nginx dẫn đến lỗi 502 xuất hiện.
Trong trường hợp này bạn cần khởi động lại php-fpm và xem logs.
Chỉnh www.conf và vhost.conf ( trong centos: /etc/php-fpm.d/www.conf  và /etc/nginx/conf.d/vhost.conf)
Bạn thử thay sang trường hợp sau vào www.conf và vhost.conf sau đó khởi động lại php-fpm. Lưu ý giá trị này trong www.conf và vhost.conf phải giống nhau.
listen = /var/run/php–fpm/php–fpm.sock
hoặc
listen = 127.0.0.1:9000

4. Lỗi 502 do ngin.x chạy cùng với dịch vụ khác với vai trò là gateway

Cố gắng khởi động lại các dịch vụ đó và kiểm tra log để tìm ra nguyên nhân lỗi.
Các tìm kiếm liên quan đến nginx
  • nginx la gi
  • nginx download
  • nginx tutorial
  • nginx document
  • nginx huong dan
  • install nginx
  • nginx free
  • Điều hướng trang

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *