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

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/www
cho 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

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.

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 Like và Share, và đừng quên đánh giá bài viết bên dưới nhé.
Nguồn MzEngineer.com