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 đều có thể làm những thứ quan trọng khác, ví như load balancing, HTTP caching, hay sử dụng như một reverse proxy. Nginx là tri thức không thể thiếu so với một web developer, system administrator hay devops.
Các mốc ra đời và phát triển của Nginx
Năm 2002, Igor Sysoev phát triển Nginx thuở đầu và công bố lần nguồn vào năm 2004. Tháng 7 năm 2011, đơn vị Nginx Inc được thành lập với trụ sở trước hết tại San Francisco, California, USA.
Nginx có tính năng gì?
Những tính năng của sever HTTP 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.
- Tương trợ tăng tốc với bộ nhớ đệm của FastCGI, uwsgi, SCGI, và các sever memcached.
- Kiến trúc modular, tăng tốc độ nạp trang bằng nén gzip tự động hóa.
- Tương 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 song song hoặc truy vấn từ là 1 địa chỉ
- Khả năng nhúng mã PERL
- Tương trợ và tương thích với IPv6
- Tương trợ WebSockets
- Tương trợ truyền tải file FLV và MP4
Những tính năng sever 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;
- Tương trợ SSL, STARTTLS và STLS
Tùy chỉnh NGINX
Có 2 phương pháp để thiết lập cấu hình NGINX, có thể sử dụng gói (package) dựng sẵn hoặc thiết lập cấu hình từ source.
Phương thức trước hết dễ và nhanh hơn, nhưng thiết lập cấu hình từ source cung cấp khả năng thiết lập cấu hình thêm các module khác giúp NGINX mạnh mẽ hơn. Nó được cho phép tất cả chúng ta tùy chỉnh cho phù phù hợp với nhu cầu của ứng dụng.
Để thiết lập cấu hình 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 thời điểm quá trình thiết lập cấu hình kết thúc, chúng ta cũng có thể kiểm tra mọi thứ là ỔN bằng phương pháp chạy lệnh tiếp sau đây, nó sẽ hiển thị phiên bản NGINX được thiết lập cấu hình:
sudo nginx -v nginx version: nginx/1.18.2
Webserver mới sẽ tiến hành thiết lập cấu hình tại /etc/nginx/. Nếu như bạn vào trong thư mục này, các bạn sẽ thấy nhiều tệp tin và thư mục. Nhưng thứ quan trọng nhất cần lưu ý là tệp tin nginx.conf và thư mục sites-available.
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ư vậy này:
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 văn cảnh. Trước nhất là events, và thứ hai là http. Cấu trúc này còn có một vài lợi thế trong việc cấu hình, như mỗi văn cảnh có thể lồng trong văn cảnh khác, cái thừa hưởng mọi thứ từ cha mẹ của chúng nhưng cũng đều có thể ghi đè thiết lập nếu cần.
Nhiều thứ trong tệp tin này còn có thể tinh chỉnh dựa theo nhu cầu của bạn, nhưng bạn cũng đều 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 khái niệm 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 nhiều kết nối song song cho từng worker process và nói cho những worker process của tất cả chúng ta có bao nhiêu người dân có thể được phục vụ song song 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 nhiều NGINX reponse. Tính năng này còn 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 chừng từ là 1 tới 10. Thông thường, giá trị này sẽ không nên to ra 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 list các kiểu response sẽ tiến hành nén.
NGINX có thể tương trợ nhiều hơn một website, và các tệp tin khái niệm các website 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 sẽ không “live” — chúng ta cũng có thể có nhiều tệp tin khái niệm các website ở đây, nhưng NGINX không thực sự làm bất kể đ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 đều có thể copy chúng tới thư mục này, nhưng symlink đảm nói 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 để sớm đưa các website trực tuyến hoặc offilne mà không cần thiết phải thực sự xóa bất kỳ tệp tin nào — khi chúng ta sẵn sàng cho một website trực tuyến, tạo symlink tới sites-enabled và phát động lại NGINX.
Thư mục site-available gồm có các cấu hình cho những host ảo (virtual host). Nó được cho phép web server có thể cấu hình cho nhiều website với những cấu hình riêng biệt. Các website trong thư mục không live và chỉ được được cho phép nếu tất cả chúng ta tạo một symlink tới thư mục sites-enabled.
Chúng ta 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ư tiếp sau đâ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 { 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 văn cảnh lồng nhau (và tất cả cũng được lồng trong văn cảnh HTTP CỦA nginx.conf, vì thế chúng cũng thừa hưởng mọi thứ từ nó).
Văn cảnh server khái niệm một server ảo để xử lý các request từ client của bạn. Chúng ta 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 thông tư listen và server_name.
Trong một khối server, tất cả chúng ta khái niệm nhiều văn cảnh location được sử dụng để quyết định cách xử lý các request từ client. Bất kỳ khi nào một request đến, NGINX sẽ thử khớp URI tới một trong số các khái niệm location và xử lý nó cho phù hợp.
Có nhiều thông tư quan trọng có thể được sử dụng dưới văn cảnh location, ví như:
- try_files sẽ cố gắng nỗ lực 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 thông tư gốc.
- proxy_pass sẽ gửi request tới một proxy server cụ thể.
- 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ó.
Văn cảnh upstream khái niệm một pool của nhiều server cái NGINX sẽ ủy quyền các request tới. Sau thời điểm tất cả chúng ta tạo một khối upstream và khái niệm 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 văn 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.
Phát động NGINX
Sau thời điểm tất cả chúng ta hoàn thành cấu hình và vận chuyển ứng dụng web tới thư mục phù hợp, tất cả chúng ta có thể phát động NGINX sử dụng lệnh tiếp sau đây: sudo service nginx start
Sau đó, bất kể khi nào tất cả chúng ta thay đổi cấu hình, tất cả chúng ta chỉ có tải lại (không có thời kì downtime) sử dụng lệnh tiếp sau đây: service nginx reload Cuối cùng, tất cả chúng ta có thể kiểm tra trạng thái của NGINX sử dụng lệnh tiếp sau đây: service nginx status
Tham khảo thêm các vị trí tuyển dụng ngành IT tại Topdev