Trang chủ / Chuyên đề / Cài đặt Nginx trên Ubuntu 18.04
Thứ tư, 06/05/2020 | 00:00 GMT+7

Cài đặt Nginx trên Ubuntu 18.04

Nginx là một trong những web server phổ biến nhất trên thế giới và đáp ứng lưu trữ web và hiện có lượng truy cập cao nhất trên internet. Nginx thân thiện với tài nguyên hơn webserver 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 proxy.

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

Yêu cầu

Trước khi bắt đầu, bạn cần một regular user (user thông thường không phải root), có các đặc quyền sudo được định cấu hình trên server. Bạn có thể xem cách định cấu hình tài khoản regular user theo hướng dẫn thiết lập server ban đầu cho Ubuntu 18.04 .

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

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

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

Vì đây là lần tương tác đầu tiên của ta với lệnh apt trong phiên này, ta sẽ cập nhật gói cục bộ để ta có quyền truy cập vào danh sách gói mới nhất. Sau đó, ta có thể cài đặt nginx :

  • sudo apt update
  • sudo apt install nginx

Sau đó apt sẽ cài đặt Nginx và mọi phụ thuộc đi kèm.

Bước 2 - Điều chỉnh firewall

Trước khi thử nghiệm Nginx, phần mềm firewall cần được điều chỉnh để cho phép truy cập vào dịch vụ.

Liệt kê các cấu hình ứng dụng mà ufw biết:

  • 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ư trên, có ba cấu hình có sẵn cho Nginx:

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

Ta nên bật cấu hình hạn chế tối đa, chỉ cho phép tối thiểu cái cần thiết. Vì chưa định cấu hình SSL cho server, nên ta chỉ cần cho phép lưu lượng truy cập trên cổng 80.

Kích hoạt tính năng này bằng lệnh:

  • sudo ufw allow 'Nginx HTTP'

Xác minh thay đổi bằng lệnh:

  • sudo ufw status

Cổng HTTP được phép:

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

Khi kết thúc quá trình cài đặt, Ubuntu 18.04 khởi động Nginx. web server đã được thiết lập và chạy.

Ta có thể kiểm tra bằng systemd init để đảm bảo dịch vụ đang chạy bằng lệnh:

  • 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

Có vẻ đã chạy thành công, nhưng kiểm tra thêm với truy cập trang web với địa chỉ ip server trên trình duyệt.

Nếu chưa có IP server, hãy tìm nó với các cách sau.

Lệnh :

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

Bạn sẽ nhận lại được một vài dòng IP, có thể thử từng cái trong trình duyệt web để xem chúng có hoạt động không.

Một cách khác, với lệnh này sẽ cung cấp cho bạn địa chỉ IP công cộng của máy bạn:

  • curl -4 icanhazip.com

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

Trang mặc định của Nginx

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

Bước 4 - Quản lý Nginx

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

Để dừng web server , hãy nhập:

  • sudo systemctl stop nginx

Để khởi động web server khi đã dừng, hãy nhập:

  • sudo systemctl start nginx

Để dừng và sau đó chạy lại, hãy nhập:

  • sudo systemctl restart nginx

Nếu chỉ thực hiện thay đổi cấu hình, Nginx có thể tải lại mà không làm mất kết nối đang có:

  • sudo systemctl reload nginx

Theo mặc định, Nginx được định cấu hình để khởi động khi server khởi động. Nếu đây không muốn, bạn có thể vô hiệu hóa bằng lệnh:

  • sudo systemctl disable nginx

Để cho nginx khởi động khi server khởi động:

  • sudo systemctl enable nginx

Khi sử dụng web server Nginx, các block server (tương tự như VirtualHost ở Apache) có thể được sử dụng để tạo chi tiết cấu hình và lưu trữ nhiều domain từ một server duy nhất. ta sẽ thiết lập một domain có tên là example.com , nhưng bạn nên thay thế domain này bằng tên domain của riêng mình.

Nginx trên Ubuntu 18.04 có một block server mặc định để cung cấp tài liệu tại /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web nhưng 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 bên trong /var/www cho trang web example.com của ta, giữ nguyên /var/www/html làm thư mục mặc định.

Tạo thư mục cho example.com như sau:

  • sudo mkdir -p /var/www/example.com/html

Tiếp theo, chỉ định quyền sở hữu thư mục với biến môi trường $USER :

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

Các quyền của root web phải chính xác nếu bạn chưa sửa đổi giá trị umask , nhưng bạn có thể đảm bảo bằng lệnh:

  • 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 editor bạn muố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
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

Rồi lưu và đóng file.

Để Nginx phân phát nội dung này, bạn cần tạo một block server với các lệnh chính xác. Thay vì sửa đổi trực tiếp file cấu hình mặc định, hãy tạo một file mới tại /etc/nginx/sites-available/ example.com :

  • sudo nano /etc/nginx/sites-available/example.com

Paste vào khối cấu hình sau, khối này tương tự như mặc định, nhưng được thay đổi cho thư mục và tên domain mới:

/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 ý ta đã cập nhật cấu hình root vào thư mục mới và server_name thành tên domain của ta.

Tiếp theo, hãy kích hoạt file bằng cách tạo liên kết từ nó đế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 block server hiện đã được kích hoạt và được định cấu hình để phản hồi các yêu cầu dựa trên các lệnh listenserver_name :

  • example.com : Sẽ phản hồi các yêu cầu cho example.comwww.example.com .
  • default : Sẽ phản hồi bất kỳ yêu cầu nào trên cổng 80 không khớp với hai khối còn lại.

Để tránh sự cố hash bucket memory thể xảy ra khi thêm tên server bổ sung, cần phải điều chỉnh một giá trị trong file /etc/nginx/nginx.conf . Mở tập tin:

  • sudo nano /etc/nginx/nginx.conf

Tìm chỉ thị server_names_hash_bucket_size và xóa ký hiệu # để bỏ comment:

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Lưu và đóng file.

Tiếp theo, kiểm tra để đảm bảo rằng không có lỗi cú pháp nào trong các file Nginx:

  • sudo nginx -t

Nếu không có lỗi nào, hãy khởi động lại Nginx để kích hoạt các thay đổi :

  • sudo systemctl restart nginx

Bạn có thể kiểm tra kết quả bằng cách vào web: http:// example.com , kết quả giống như sau:

Khối máy chủ đầu tiên của Nginx

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

Bạn nên dành vài phút để tự làm quen với một số thư mục và file quan trọng.

Nội dung

  • /var/www/html : Nội dung web theo mặc định chỉ bao gồm trang Nginx mặc định, được phân phát từ thư mục /var/www/html . Nếu cần có thể được thay đổi bằng cách thay đổi các file cấu hình Nginx.

Cấu hình server

  • /etc/nginx : Thư mục cấu hình Nginx. Tất cả các file cấu hình Nginx đều nằm ở đây.
  • /etc/nginx/nginx.conf : file cấu hình Nginx chính. Có thể được sửa đổi để thực hiện các thay đổi đối với cấu hình global của Nginx.
  • /etc/nginx/sites-available/ : Thư mục có thể lưu trữ các block server trên mỗi trang web. Nginx sẽ không sử dụng các file 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 block server đượ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 block server cho mỗi trang. Thông thường, chúng được tạo bằng cách liên kết đến các file cấu hình được tìm thấy trong thư mục sites-available của sites-available .
  • /etc/nginx/snippets : Thư mục này chứa các cấu hình có thể được bao gồm ở những nơi khác trong cấu hình Nginx, lặp lại thì để một chỗ sẽ tiện lợi khi dùng, khỏi phải viết lại.

Nhật ký server

  • /var/log/nginx/access.log : các yêu cầu đến web server đều được ghi lại trong file nhật ký này trừ khi Nginx được định cấu hình ở nơi khác.
  • /var/log/nginx/error.log : Mọi lỗi Nginx sẽ được ghi lại trong nhật ký này.

Kết luận

Vậy bạn đã cài xong web server, có nhiều tùy chọn về loại nội dung để phân phát và các công nghệ sử dụng để tạo ra trải nghiệm phong phú hơn.

Nếu bạn muốn xây dựng hoàn chỉnh hơn, hãy xem bài viết này về cách cài đặt cấu hình LEMP trên Ubuntu 18.04 .



Các tin trước

Cài đặt và bảo mật phpMyAdmin trên Ubuntu 20.04 2020-05-04

Cài đặt và bảo mật Redis trên Ubuntu 18.04 2020-04-30

Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 20 04 2020-04-29

Cài đặt LEMP Linux Nginx MySQL PHP (LEMP ) trên Ubuntu 20 04 2020-04-29

Bảo mật apache với let-s-encrypt trên Ubuntu 20.04 2020-04-29

Cài đặt Apache Web Server trên Ubuntu 20.04 2020-04-27

Cài đặt Nginx trên Ubuntu 20.04 2020-04-24

Khởi tạo bảo mật Server Ubuntu 20.04 2020-04-23

Cài đặt SSH Key trên Ubuntu 20.04 2020-04-23

Cài đặt MySQL trên Ubuntu 18.04 2020-04-21