Cách Cài Đặt Nginx trên Ubuntu 18.04

1 năm trước

 

Giới Thiệu 

Nginx là một trong những web server 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. Nó thân thiện hơn so với Apache trong hầu hết các trường hợp và có thể được sử dụng như một web server hoặc reverse proxy .

Trong hướng dẫn này, chúng ta sẽ thảo luận về cách cài đặt Nginx trên máy chủ Ubuntu 18.04 của bạn.

Yêu Cầu 

Trước khi bạn bắt đầu hướng dẫn này, bạn nê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ạn có thể tìm hiểu cách cấu hình tài khoản người dùng thường bằng cách làm theo hướng dẫn Thiết lập máy chủ ban đầu cho Ubuntu 18.04 (Tìm kiếm tại ViCloud Community)

Khi bạn có sẵn tài khoản, hãy đăng nhập với tư cách người dùng không root để bắt đầu.

 

Bước 1 – Cài đặt Nginx

Bởi vì Nginx có sẵn trong kho lưu trữ mặc định của Ubuntu, hãy cài đặt nó từ các kho này bằng cách sử dụng hệ thống đóng gói apt.

Vì đây là lần đầu tiên tương tác với hệ thống đóng gói apt trong phiên này, chúng ta sẽ cập nhật chỉ mục gói 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

Sau khi chấp nhận thủ tục, apt sẽ cài đặt Nginx và mọi phụ thuộc cần thiết cho server của bạn.

Bước 2 – Điều chỉnh 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

Bạn sẽ nhận được một danh sách các profile ứng dụng:

output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
 

Như bạn có thể thấy, có ba profile có sẵn cho 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 gõ:

sudo ufw allow 'Nginx HTTP'
  •  

 Xác minh thay đổi bằng cách gõ:

sudo ufw status
  •  

Bạn sẽ thấy traffic HTTP được phép trong output được hiển thị:

Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere 
Nginx HTTP ALLOW Anywhere 
OpenSSH (v6) ALLOW Anywhere (v6) 
Nginx HTTP (v6) ALLOW Anywhere (v6)
 
 

Bước 3 - 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 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 2018-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process
 

Như bạn có thể thấy ở trên, service dường như đã bắt đầu thành công. Tuy nhiên, cách tốt nhất để kiểm tra điều này là yêu cầu một trang từ Nginx.

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.

Hãy thử gõ vào dấu nhắc lệnh của server :

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

Bạn sẽ lấy lại một vài dòng. Bạn có thể thử từng trình duyệt web của mình để xem chúng có hoạt động hay không.

Cách khác là nhập địa chỉ này, nó cung cấp cho bạn địa chỉ IP public của bạn như được thấy từ một vị trí khác trên internet:

curl -4 icanhazip.com

Khi bạn có địa chỉ IP của server, hãy nhập địa chỉ đó vào thanh địa chỉ của trình duyệt:

http://your_server_ip

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

Nginx default page

Trang này được bao gồm với Nginx để cho bạn thấy rằng server đang chạy chính xác.

Bước 4 - Quản lý quá trình Nginx

Bây giờ bạn đã thiết lập và chạy web server của mình, hãy xem lại một số lệnh quản lý cơ bản.

Để dừng web server , hãy gõ:

sudo systemctl stop nginx

Để khởi động web server, hãy gõ:

sudo systemctl start nginx

Khởi động lại service, hãy gõ:

sudo systemctl restart nginx

Nếu bạn chỉ đơ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. Để thực hiện việc này, hãy nhập:

sudo systemctl reload nginx

Theo mặc định, Nginx được cấu hình để khởi động tự động khi server khởi động. Nếu đây không phải là điều bạn muốn, bạn có thể tắt  bằng cách gõ:

sudo systemctl disable nginx

 

Kích hoạt lại service để khởi động lúc mở,  gõ:

sudo systemctl enable nginx

Khi sử dụng web server Nginx, các server blocks (tương tự như các máy chủ ảo trong Apache) có thể được sử dụng để đóng gói chi tiết cấu hình và lưu trữ nhiều hơn một tên miền từ một server duy nhất. Chúng ta sẽ thiết lập tên miền có tên example.com, 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 18.04 có một  server block  được kích hoạt theo mặc định và được cấu hình để phân phối tài liệu ra khỏi thư mục tại /var/www/html. Trong khi điều này hoạt động tốt cho một trang web duy nhất, 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 example.com , để  /var/www/html  làm thư mục mặc định  nếu yêu cầu của khách hàng không phù hợp với bất kỳ trang web nào khác.

Tạo thư mục cho example.com như sau, sử dụng chỉ báo -p để tạo bất kỳ thư mục cần thiết nào:

sudo mkdir -p /var/www/example.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/example.com/html
  •  

Quyền web roots 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, hãy đảm bảo bằng cách gõ:

sudo chmod -R 755 /var/www/example.com

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/example.com/html/index.html

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

/var/www/example.com/html/index.html
 

Success! The example.com server block is working!

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 ở /etc/nginx/sites-available/example.com:

sudo nano /etc/nginx/sites-available/example.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:

/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
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 chúng ta.

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 từ khi khởi động:

sudo ln -s /etc/nginx/sites-available/example.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 .

  • example.com: Sẽ phản hồi các yêu cầu choexample.com and www.example.com
  • default:Sẽ phản hồi mọi yêu cầu trên cổng 80 không khớp với hai blocks khác.

Để 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 phati điều chỉnh giá trị trong tệp /etc/nginx/nginx.conf . Mở tệp:

sudo nano /etc/nginx/nginx.conf

Tìm chỉ thị  server_names_hash_bucket_size và xóa biểu tượng # để bỏ dòng ghi chú:

/etc/nginx/nginx.conf
...
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 nào:

sudo 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:

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://example.com, bạn sẽ thấy điều gì đó như sau:

Nginx first server block

 

Bước 6 - Làm quen với các tệp và thư mục Nginx quan trọng

Bây giờ bạn đã biết cách quản lý Nginx service , bạn nên dành ít phút để làm quen với một vài thư mục và tệp quan trọng.

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 đề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 để thay đổi cấu hình Nginx global.
  • /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/snippetsThư 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 được ghi lại trong tệp log trừ khi Nginx được cấu hình để thực hiện khác .
  • /var/log/nginx/error.log: Bất kỳ lỗi Nginx nào cũng sẽ được ghi vào log này.

Kết Luận 

Bây giờ bạn đã cài đặt web server, có nhiều tùy chọn content , technologies cho bạn để phục vụ và sử dụng để tạo trải nghiệm phong phú hơn.

Nếu bạn muốn xây dựng một ứng dụng stack hoàn chỉnh hơn , hãy xem bài viết này Cách cấu hình LEMP stack trên Ubuntu 16.04.