Ngày đăng: 24 tháng 10 năm 2023
Nginx là một trong những máy chủ web phổ biến nhất trên thế giới và chịu trách nhiệm lưu trữ một số trang web lớn nhất và có lưu lượng truy cập cao nhất trên internet. Đó là một lựa chọn nhẹ nhàng có thể được sử dụng làm máy chủ web hoặc reverse proxy.
Trong hướng dẫn này, chúng tôi sẽ thảo luận cách cài đặt Nginx trên máy chủ Ubuntu 22.04 của bạn, điều chỉnh tường lửa, quản lý quy trình Nginx và thiết lập các server block để lưu trữ nhiều tên miền từ một máy chủ.
Trước khi bắt đầu hướng dẫn này, bạn nên có một non-root user thông thường với các đặc quyền sudo
được định cấu hình trên máy chủ của bạn. Bạn có thể tìm hiểu cách định cấu hình tài khoản người dùng thông thường bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi cho Ubuntu 22.04.
Bạn cũng có thể đăng ký một tên miền tại CloudFly trước khi hoàn thành các bước cuối cùng của hướng dẫn này.
Khi bạn có sẵn tài khoản, hãy đăng nhập với tư cách non-root user để bắt đầu.
Vì Nginx có sẵn trong kho mặc định của Ubuntu nên có thể cài đặt nó từ các kho này bằng packaging system apt
.
Vì đây là lần tương tác đầu tiên của chúng tôi với packaging system apt
trong session này nên chúng tôi sẽ cập nhật chỉ mục gói (package index) cục bộ để có quyền truy cập vào danh sách gói gần đây nhất. Sau đó, chúng ta có thể cài đặt nginx
:
- sudo apt update
- sudo apt install nginx
Nhấn Y
khi được nhắc xác nhận cài đặt. Nếu bạn được nhắc khởi động lại bất kỳ dịch vụ nào, hãy nhấn ENTER
để chấp nhận các giá trị mặc định và tiếp tục. apt
sẽ cài đặt Nginx và mọi phụ thuộc cần thiết vào máy chủ của bạn.
Trước khi kiểm tra Nginx, phần mềm tường lửa cần được cấu hình để cho phép truy cập vào dịch vụ. Nginx tự đăng ký như một dịch vụ với ufw
khi cài đặt, giúp việc cho phép truy cập Nginx trở nên đơn giản.
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
Bạn sẽ nhận được một danh sách các hồ sơ ứng dụng:
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Như được minh họa bằng đầu ra, có ba cấu hình có sẵn cho Nginx:
Bạn nên bật cấu hình hạn chế nhất mà vẫn cho phép lưu lượng truy cập bạn đã định cấu hình. Ngay bây giờ, chúng tôi sẽ chỉ cần cho phép lưu lượng truy cập trên cổng 80.
Bạn có thể kích hoạt tính năng này bằng cách gõ:
- sudo ufw allow 'Nginx HTTP'
Bạn có thể xác minh thay đổi bằng cách gõ:
- sudo ufw status
Đầu ra sẽ cho biết lưu lượng HTTP nào được phép:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Khi kết thúc quá trình cài đặt, Ubuntu 22.04 khởi động Nginx. Máy chủ web đã được thiết lập và chạy.
Chúng ta có thể kiểm tra hệ thống init systemd
để đảm bảo dịch vụ đang chạy bằng cách gõ:
- systemctl status nginx
Output● 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 Fri 2022-03-01 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
Theo xác nhận này, dịch vụ đã bắt đầu thành công. Tuy nhiên, cách tốt nhất để kiểm tra điều này là thực sự yêu cầu một trang từ Nginx.
Bạn có thể truy cập Nginx landing page mặc định để xác nhận rằng phần mềm đang chạy bình thường bằng cách điều hướng đến địa chỉ IP máy chủ của bạn. Nếu bạn không biết địa chỉ IP máy chủ của mình, bạn có thể tìm thấy nó bằng cách sử dụng công cụ ianhazip.com, công cụ này sẽ cung cấp cho bạn địa chỉ IP công cộng của bạn khi nhận được từ một vị trí khác trên internet:
- curl -4 icanhazip.com
Khi bạn có địa chỉ IP của máy chủ, hãy nhập địa chỉ đó vào thanh địa chỉ của trình duyệt:
http://your_server_ip
Bạn sẽ nhận được Nginx landing page mặc định:
Nếu bạn đang ở trang này thì máy chủ của bạn đang chạy bình thường và sẵn sàng để quản lý.
Bây giờ bạn đã thiết lập và chạy máy chủ web của mình, hãy xem lại một số lệnh quản lý cơ bản.
Để dừng máy chủ web của bạn, gõ:
- sudo systemctl stop nginx
Để khởi động máy chủ web khi nó bị dừng, hãy gõ:
- sudo systemctl start nginx
Để dừng và sau đó bắt đầu lại dịch vụ, hãy gõ:
- sudo systemctl restart nginx
Nếu bạn chỉ thực hiện thay đổi cấu hình, Nginx thường có thể tải lại mà không làm mất kết nối. Để thực hiện việc này, gõ:
- sudo systemctl reload nginx
Theo mặc định, Nginx được cấu hình để tự động khởi động khi máy chủ khởi động. Nếu đây không phải là điều bạn muốn, bạn có thể tắt hành vi này bằng cách gõ:
- sudo systemctl disable nginx
Để kích hoạt lại dịch vụ để khởi động khi boot, bạn có thể gõ:
- sudo systemctl enable nginx
Bây giờ bạn đã học các lệnh quản lý cơ bản và đã sẵn sàng định cấu hình trang web để lưu trữ nhiều tên miền.
Khi sử dụng máy chủ web Nginx, các server block (tương tự như máy chủ ảo trong Apache) có thể được sử dụng để gói gọn chi tiết cấu hình và lưu trữ nhiều miền từ một máy chủ. Chúng tôi sẽ thiết lập một miền có tên your_domain, nhưng bạn nên thay thế tên miền này bằng tên miền của riêng bạn.
Nginx trên Ubuntu 22.04 có một server block được bật theo mặc định được định cấu hình để phân phát các tài liệu ngoài thư mục tại /var/www/html
. Mặc dù điều này hoạt động tốt cho một trang web nhưng nó có thể trở nên khó sử dụng nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html
, hãy tạo cấu trúc thư mục trong /var/www
cho trang your_domain của chúng ta, để lại /var/www/html
làm thư mục mặc định sẽ được cung cấp nếu yêu cầu của khách hàng không khớp với bất kỳ yêu cầu nào các trang web khác.
Tạo thư mục cho your_domain như sau, sử dụng cờ -p
để tạo bất kỳ thư mục mẹ cần thiết nào:
- sudo mkdir -p /var/www/your_domain/html
Tiếp theo, gán quyền sở hữu thư mục với biến môi trường $USER
:
- sudo chown -R $USER:$USER /var/www/your_domain/html
Các quyền của web root của bạn phải chính xác nếu bạn chưa sửa đổi giá trị umask
của mình, giá trị này sẽ đặt quyền truy cập tệp mặc định. Để đảm bảo rằng các quyền của bạn là chính xác và cho phép chủ sở hữu đọc, ghi và thực thi các tệp trong khi chỉ cấp quyền đọc và thực thi cho các nhóm và những người khác, bạn có thể nhập lệnh sau:
- sudo chmod -R 755 /var/www/your_domain
Tiếp theo, tạo một trang index.html
mẫu bằng nano
hoặc trình chỉnh sửa yêu thích của bạn:
- nano /var/www/your_domain/html/index.html
Bên trong, thêm HTML mẫu sau:
<html>
<head>
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
Lưu và đóng tệp bằng cách nhấn Ctrl+X
để thoát, sau đó khi được nhắc lưu, Y
rồi Enter
.
Để Nginx phục vụ nội dung này, cần phải tạo một server block 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 tại /etc/nginx/sites-available/your_domain
:
- sudo nano /etc/nginx/sites-available/your_domain
Dán vào khối cấu hình dưới đây, nó tương tự như mặc định nhưng được cập nhật cho thư mục và tên miền mới của chúng tôi:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
Lưu ý rằng chúng tôi đã cập nhật cấu hình root
vào thư mục mới và server_name
thành tên miền của chúng tôi.
Tiếp theo, hãy kích hoạt tệp bằng cách tạo một liên kết từ nó đến thư mục sites-enabled
mà Nginx đọc trong khi khởi động:
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Lưu ý: Nginx sử dụng một phương pháp phổ biến được gọi là symbolic links hoặc symlinks để theo dõi server blocks nào của bạn được bật. Tạo một symlink (liên kết tượng trưng) cũng giống như tạo một shortcut trên disk, để sau này bạn có thể xóa shortcut khỏi thư mục sites-enabled
trong khi vẫn giữ server block trong sites-available
nếu bạn muốn bật nó..
Hai server block hiện đã được kích hoạt và định cấu hình để đáp ứng các yêu cầu dựa trên chỉ thị listen
và server_name
của chúng:
your_domain
: Sẽ đáp ứng các yêu cầu về your_domain
và www.your_domain
.default
: Sẽ đáp ứng mọi yêu cầu trên cổng 80 không khớp với hai block còn lại.Để tránh sự cố bộ nhớ hash bucket có thể xảy ra khi thêm tên máy chủ bổ sung, cần phải điều chỉnh một giá trị trong tệp /etc/nginx/nginx.conf
. Mở tập tin:
- sudo nano /etc/nginx/nginx.conf
Tìm lệnh server_names_hash_bucket_size
và xóa ký hiệu #
để bỏ ghi chú dòng. Nếu bạn đang sử dụng nano, bạn có thể nhanh chóng tìm kiếm các từ trong tệp bằng cách nhấn CTRL
và w
.
Lưu ý: Nhận xét các dòng code – thường bằng cách đặt #
ở đầu dòng – là một cách khác để vô hiệu hóa chúng mà không cần phải xóa chúng. Nhiều tệp cấu hình đi kèm với nhiều tùy chọn được nhận xét để có thể bật hoặc tắt chúng bằng cách chuyển đổi chúng giữa active code và tài liệu.
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
Lưu và đóng tập tin khi bạn hoàn tất.
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 nào của bạn:
- sudo nginx -t
Nếu không có bất kỳ vấn đề nào, hãy khởi động lại Nginx để kích hoạt các thay đổi của bạn:
- sudo 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 http://your_domain
, nơi bạn sẽ thấy nội dung như thế này:
Bây giờ bạn đã biết cách quản lý dịch vụ Nginx, bạn nên dành vài phút để làm quen với một số thư mục và tệp quan trọng.
/var/www/html
: Nội dung web thực tế, theo mặc định chỉ bao gồm trang Nginx mặc định mà bạn đã thấy trước đó, được cung cấp bên ngoài 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./etc/nginx
: Thư mục cấu hình Nginx. Tất cả các tệp cấu hình Nginx đều nằm ở đây./etc/nginx/nginx.conf
: Tệp cấu hình Nginx chính. Điều này có thể được sửa đổi để thực hiện các thay đổi đối với cấu hình toàn cầu Nginx./etc/nginx/sites-available/
: Thư mục nơi các server block trên mỗi trang có thể đượ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 thư mục sites-enabled
. Thông thường, tất cả cấu hình khối máy chủ đượ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 lưu trữ các server block được kích hoạt trên mỗi trang. 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 đoạn cấu hình có thể được đưa vào nơi khác trong cấu hình Nginx. Các phân đoạn cấu hình có khả năng lặp lại là ứng cử viên sáng giá để tái cấu trúc thành các đoạn mã./var/log/nginx/access.log
: Mọi yêu cầu tới máy chủ web của bạn đều được ghi lại trong tệp nhật ký này trừ khi Nginx được định cấu hình để thực hiện khác./var/log/nginx/error.log
: Mọi lỗi Nginx sẽ được ghi lại trong nhật ký này.Bây giờ bạn đã cài đặt máy chủ web của mình, bạn có nhiều tùy chọn về loại nội dung sẽ phục vụ và công nghệ bạn muốn sử dụng để tạo ra trải nghiệm phong phú hơn.
Nếu bạn muốn xây dựng một stack ứng dụng hoàn chỉnh hơn, hãy xem bài viết Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP stack) trên Ubuntu 22.04.
Để thiết lập HTTPS cho tên miền của bạn bằng chứng chỉ SSL miễn phí bằng Let's Encrypt, bạn nên chuyển sang Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 22.04.