Nginx là phần mềm web server mã nguồn mở phát hành khoảng 2004, phát triển bởi Igor Sysoev, được viết bằng C ( Programming language ). Nginx là một trong những Web server rất phổ biến trên thế giới và nó chịu trách nhiệm lưu trữ một số trang web lớn và có lưu lượng truy cập cao nhất trên Internet.

Một số tính năng có sẵn trên Nginx là:

  • Tối ưu sử dụng Ram, nhưng vẫn có thể phục vụ nhiều kết nối đồng thời
  • Sử dụng kiến trúc hướng sự kiện, không đồng bộ, có thể được mở rộng
  • Support WebSockets
  • Giới hạn kết nối đồng thời từ 1 IP
  • Rewrite URL
  • Nhúng Perl, Lua,..
  • Fast CGI hỗ trợ caching
  • Tương thích IPv6
  • …………………..

Nginx Server làm được nhiều việc hơn một Web Server thông thường, vì vậy nó rất phổ biến. Nginx có khả năng vượt trội hơn các Web server cũ nên nó giữ vững điểm benchmark cao hơn về hiệu năng so với các Web Server cũ.

Có thể bạn quan tâm :

A.Yêu Cầu Cài Đặt Nginx

Trước khi bắt đầu cài đặt, bạn cần có một người dùng thường với quyền “sudo” được cấu hình trên Server của bạn.

B.Cài Đặt Nginx

Nginx có sẵn trong kho lưu trữ mặc định của Ubuntu, bạn có thể cài đặt nó bằng cách sử dụng lệnh apt

Trong bài viết này MZE sẽ cài Nginx 1.14 trên Ubuntu 18.04.4 LTS

1.Cập nhật hệ thống

# sudo apt update

2.Cài đặt Nginx

# sudo apt install nginx

Kiểm tra phiên bản Nginx bằng lệnh

# sudo nginx -V

Output

nginx version: nginx/1.14.0 (Ubuntu)
built with OpenSSL 1.1.1 11 Sep 2018

C.Thiết lập Firewall

Trước khi thử nghiệm Nginx, phần mềm firewall cần phải được điều chỉnh để cho phép truy cập vào Service. Nginx đăng ký chính nó như một service với ufw khi cài đặt, làm nó đơn giản để cho phép Nginx truy cập.

Liệt kê các cấu hình ứng dụng mà ufw biết cách làm việc bằng cách gõ

# sudo ufw app list

Output :

Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

Có ba cấu hình sẵn trong Nginx :

  • Nginx Full: Profile này mở cả cổng 80 (traffic web thông thường, không được mã hóa) và cổng 443 (traffic được mã hóa TLS / SSL)
  • Nginx HTTP: Profile này chỉ mở cổng 80 (traffic web thông thường, không được mã hóa)
  • Nginx HTTPS: Profile này chỉ mở cổng 443 (traffic được mã hóa TLS / SSL)

Chúng tôi khuyên bạn nên bật profile hạn chế nhất mà vẫn cho phép traffic bạn đã định cấu hình. Vì chúng ta chưa định cấu hình SSL cho máy chủ trong hướng dẫn này, chúng ta sẽ chỉ cần cho phép traffic trên cổng 80.

Bạn có thể bật tính năng này bằng dòng lệnh

# sudo ufw allow 'Nginx HTTP'

 Xác minh tình trạng bằng dòng lệnh

# sudo ufw status

Nếu chưa bật Firewall trên Ubuntu sẽ có output

# sudo ufw status
Status: inactive

Kích hoạt Firewall bằng dòng lệnh

# sudo ufw enable

Kiểm tra lại trạng thái Firewall

# sudo ufw status
Status: active

To Action From
-- ------ ----
Nginx HTTP ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)

D.Kiểm tra Web Server của bạn

Khi kết thúc quá trình cài đặt, Ubuntu 18.04 bắt đầu Nginx. Web server đã được thiết lập và đang chạy.Chúng ta có thể kiểm tra với init systemd của hệ thống để đảm bảo dịch vụ đang chạy bằng cách dùng dòng lệnh

# systemctl status nginx

Output : bạn xem dòng Active đã báo running là OK nhé

   nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-03-23 16:10:37 UTC; 2 days ago
     Docs: man:nginx(8)
 Main PID: 850 (nginx)
    Tasks: 2 (limit: 1152)
   CGroup: /system.slice/nginx.service
           ├─850 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─851 nginx: worker process
Mar 23 16:10:37 ubuntu-01 systemd[1]: Starting A high performance web server and a reverse proxy ser
Mar 23 16:10:37 ubuntu-01 systemd[1]: Started A high performance web server and a reverse proxy serv

Tới đây thì bạn đã cài thành công Nginx, để đảm bảo bạn có thể thử lại bằng IP Public của Server qua các bước tiếp theo

Bạn có thể truy cập trang đích Nginx mặc định để xác nhận rằng phần mềm đang chạy đúng cách bằng cách điều hướng đến địa chỉ IP của server của bạn. Nếu  không biết địa chỉ IP của server, bạn có thể nhận được một số cách khác nhau.

Sử dụng lệnh sau :

# ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Output :

128.199.165.168
10.15.0.9
fe80::b870:fbff:feac:e8ea

Hãy lấy địa chỉ IP Public của Server nhập vào trình duyệt Web

Cách khác, bạn có thể sử dụng lệnh bên dưới

# curl -4 icanhazip.com
128.199.165.168 địa chỉ IP của Server

Khi bạn có địa chỉ IP của server, bạn cần nhập vào trình duyệt Web để xem kết quả ( như hình bên dưới )

Bạn sẽ thấy trang đích Nginx mặc định như hình

cai-nginx-ubuntu-18-04
Cài Nginx trên Ubuntu 18.04

E.Quản lý tiến trình hoạt động Nginx

Tạm dừng Nginx server

# systemctl stop nginx

Khởi động Nginx server

# systemctl start nginx

Khởi động lại Nginx server

# systemctl restart nginx

Kích hoạt Nginx server khởi động cùng hệ thống

# systemctl enable nginx

Hủy kích hoạt Nginx server khởi động cùng hệ thống

Mặc định Nginx được cấu hình để khởi động tự động khi Server khởi động, bạn có thể hủy bằng lệnh

# systemctl disable nginx

Nếu đơn giản là thực hiện thay đổi cấu hình, Nginx có thể tải lại thường xuyên mà không làm mất kết nối, bằng cách sử dụng lệnh

# systemctl reload nginx

F.Thiết Lập Nginx Server Block Trên Ubuntu

Khi sử dụng web server Nginx, các Server Block (gần giống như Virtual Host trong Apache) nó có thể được sử dụng để đóng gói chi tiết cấu hình và lưu trữ được nhiều tên miền hơn từ một Server

Cách thực hiện như thế nào ? bạn cần thay đổi tên miền có tên example.com thành tên miền của bạn như yourdomain.com ( trong bài viết này mình sử dụng chính tên miền của mình là mzengineer.com )

Nginx trên Ubuntu 18.04 có một  server block  được kích hoạt theo mặc định và được cấu hình để lưu trữ source code Website của bạn tại đường dẫn /var/www/html.

Nếu như bạn chỉ có một tên miền cho 1 Server thì không sao, vấn đề đặt ra ở đây là bạn có nhiều tên miền, muốn sử dụng 1 chung Server để tiết kiệm chi phí.

Bạn có thể sửa đổi thư mục đường dẫn /var/www/html, nhưng theo MZE, bạn nên tạo riêng mỗi folder là một tên miền, như vậy bạn sẽ dễ dàng quản lý dữ liệu hơn, bạn hãy tạo cấu trúc thư mục có trong /var/wwwcho trang mzengineer.com , làm thư mục mặc định.

Tạo thư mục cho mzengineer.com như sau, sử dụng lệnh bên dưới, tùy chọn -p kèm cấp thư mục

sudo mkdir -p /var/www/mzengineer.com/html

Tiếp theo, gán quyền sở hữu của thư mục với biến môi trường $USER :

sudo chown -R $USER:$USER /var/www/mzengineer.com/html

Phân quyền truy cập :

# chmod -R 755 /var/www/mzengineer.com

Tiếp theo, tạo một trang index.html mẫu bằng nano hoặc trình chỉnh sửa bạn quen thuộc :

# nano /var/www/mzengineer.com/html/index.html

Bên trong, thêm HTML mẫu sau:

/var/www/mzengineer.com/html/index.html
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Success! The MzEngineer.com server block is working!</h1>
</body>
</html>

Lưu và đóng tệp khi hoàn thành.

Để Nginx phục vụ nội dung này, cần thiết phải tạo một khối máy chủ với các chỉ thị chính xác. Thay vì sửa đổi trực tiếp tệp cấu hình mặc định, hãy tạo một tệp mới theo đường dẫn thư mục /etc/nginx/sites-available/mzengineer.com cần nhớ là thay đổi mzengineer.com bằng tên miền của bạn nhé

Kết quả khi gõ tên miền vào trình duyệt

kiem-tra-hoat-dong-nginx-bang-ten-mien
Kiểm tra hoạt động Nginx bằng tên miền

Sử dụng lệnh nano

# nano /etc/nginx/sites-available/mzengineer.com

Dán vào khối cấu hình sau, tương tự như mặc định, nhưng được cập nhật cho thư mục mới và tên miền của chúng ta

server {
 listen 80;
 listen [::]:80;

server_name mzengineer.com www.mzengineer.com;

root /var/www/mzengineer.com/html;
index index.html index.htm index.nginx-debian.html;

 location / {
 try_files $uri $uri/ =404;
 }
}

Lưu ý rằng chúng ta đã cập nhật cấu hình root thành thư mục mới và  server_name thành tên miền của bạn.

Tiếp theo, hãy kích hoạt tập tin bằng cách tạo một liên kết đến thư mục sites-enabled, mà Nginx đọc khi khởi động

# ln -s /etc/nginx/sites-available/mzengineer.com /etc/nginx/sites-enabled/

Hai server blocks hiện đã được kích hoạt và được cấu hình để đáp ứng các yêu cầu dựa trên các chỉ thị listen và server_name của chúng .

  • mzengineer.com : Sẽ phản hồi các yêu cầu cho mzengineer.com and www.mzengineer.com
  • default : nó sẽ phản hồi mọi yêu cầu trên cổng 80 nếu không khớp với hai blocks khác. ( đây là cấu hình mặc định, nếu cần bạn có thể xóa, hoặc sao lưu nó )

Để tránh gặp vấn đề với bộ nhớ bucket từ việc thêm các tên máy chủ bổ sung , cần điều chỉnh giá trị trong tệp /etc/nginx/nginx.conf. Mở tệp:

# nano /etc/nginx/nginx.conf

Tìm chỉ thị server_names_hash_bucket_size và xóa dấu ” # ” để bỏ ghi chú

...
http {
...
server_names_hash_bucket_size 64;
...
}...

Tiếp theo, kiểm tra để đảm bảo rằng không có lỗi cú pháp trong bất kỳ tệp Nginx

# nginx -t

Lưu và đóng file khi hoàn thành.

Nếu không có bất kỳ sự cố nào , hãy khởi động lại Nginx để kích hoạt các thay đổi

# systemctl restart nginx

Nginx bấy giờ sẽ phục vụ tên miền của bạn . Bạn có thể kiểm tra điều này bằng cách điều hướng đến https://mzengineer.com , với mzengineer.com được thay bằng tên miền của bạn

G.Các File Và Folder Nginx Lưu Ý

Theo dõi từ đầu tới giờ, bạn chắc đã có thể tự cấu hình Nginx Server, bây giờ bạn sẽ cần nắm rõ hơn cấu trúc các file và thư mục có trong Nginx để có thể dễ dàng chỉnh sửa khi cần thiết

Nói sơ qua về Nginx, nó bao gồm các module được điều khiển bởi các directive trong file cấu hình. “Directive” được định nghĩa như 1 instruction (chỉ dẫn) hay direct. Directives được chia thành các directive đơn giản và các block directive.

  • Cấu trúc của 1 directive đơn giản gồm tên và tham số được phân tách bởi dấu cách và kết thúc bằng dấu chấm phẩy;. Ví dụ về 1 directive đơn giản :  worker_connections 768;
  • Một block directive có cấu trúc tương tự như một directice đơn giản nhưng thay vì sử dụng dấu ; nó sẽ sử dụng cặp dấu {} để bắt đầu và kết thúc 1 block directive.
main-content-trong-nginx-server
Main Content trong Nginx Server

Một main context sẽ bao gồm nhiều directive đơn giản, nhiều context(ví dụ: context A, context B) chứa các block directive.

Content

/var/www/html : Nội dung web thực tế, theo mặc định, chỉ bao gồm trang Nginx mặc định bạn đã xem trước đó, được phân phối trong thư mục /var/www/html. Điều này có thể được thay đổi bằng cách thay đổi tệp cấu hình Nginx

Server Configuration

  • /etc/nginx : Thư mục cấu hình Nginx. Tất cả các tệp cấu hình Nginx nằm ở đây.
  • /etc/nginx/nginx.conf : Tệp cấu hình Nginx chính. File này có thể được sửa để thay đổi cấu hình Nginx global.
  • /usr/share/nginx/html : Document root directory
  • /etc/nginx/sites-available/: Thư mục nơi các per-site server blocks được lưu trữ. Nginx sẽ không sử dụng các tệp cấu hình được tìm thấy trong thư mục này trừ khi chúng được liên kết với mục sites-enabled . Thông thường , tất cả các cấu hình server block được thực hiện trong thư mục này, và sau đó được kích hoạt bằng cách liên kết đến thư mục khác.
  • /etc/nginx/sites-enabled/ : Thư mục nơi lưu trữ các per-site server blocks . Thông thường , chúng được tạo bằng cách liên kết đến các tệp cấu hình được tìm thấy trong thư mục sites-available.
  • /etc/nginx/snippets : Thư mục này chứa các configuration fragments được bao gồm ở các nơi khác trong cấu hình Nginx. Các configuration segments lặp lại có thể là các ứng cử viên tốt để tái cấu trúc thành các đoạn mã.

Server Logs

  • /var/log/nginx/access.log : Mọi yêu cầu đối với Web server của bạn sẽ được ghi lại trong file log này trừ khi Nginx được cấu hình khác.
  • /var/log/nginx/error.log : Khi gặp bất kỳ lỗi Nginx nào, hệ thống sẽ ghi vào file này

Kết Luận 

Bây giờ bạn đã có thể cài Nginx cho Ubuntu, cấu hình Server Block trên Nginx, hiểu rõ hơn về các thư mục cấu hình NGINX

Nếu bài viết có ích hãy LikeShare, và đừng quên đánh giá bài viết bên dưới nhé.

Nguồn MzEngineer.com

LEAVE A REPLY

Please enter your comment!
Please enter your name here