Cài đặt và quản lý máy chủ web Nginx trên Ubuntu

Điều kiện cần:

  • Đã biết những lệnh cơ bản trên Linux
  • Đã từng sử dụng Terminal trên Ubuntu
  • Hiểu được cách vận hành Web Server
  • Biết lập trình HTML/CSS/Javascript

Giới thiệu Nginx

Nginx (phát âm là "engine X", / ˌɛndʒɪnˈɛks / EN-jin-EKS), cách điệu là NGINX, nginx hoặc NginX, là một máy chủ web có thể được sử dụng làm proxy ngược, bộ cân bằng tải, proxy thư điện tử và bộ đệm HTTP. Phần mềm được tạo ra bởi Igor Sysoev và phát hành công khai vào năm 2004. Nginx là phần mềm mã nguồn mở và miễn phí, được phát hành theo các điều khoản của điều khoản giấy phép BSD2. Phần lớn các máy chủ web sử dụng NGINX, thường là bộ cân bằng tải.

Một công ty cùng tên được thành lập vào năm 2011 để cung cấp hỗ trợ và phần mềm trả phí Nginx Plus. Vào tháng 3 năm 2019, công ty đã được F5 Networks mua lại với giá 670 triệu đô la.

Tính đến tháng 1 năm 2021, Netcraft ước tính rằng Apache phục vụ 24,63% trong số triệu trang web được truy cập nhiều nhất, trong khi Nginx phục vụ 23,21% và Microsoft đứng ở vị trí thứ ba với 6,85% (đối với một số thống kê khác của Netcraft, Nginx đi trước Apache), Theo W3Techs, Apache đứng đầu với 35,0% và Nginx đứng thứ hai với 33,0% và Cloudflare Server thứ ba với 17,3%.

Cài đặt và chạy máy chủ Web Nginx:

  • Thực hiện cài đặt Nginx theo các lệnh sau:
    $ sudo apt update
    $ sudo apt install nginx
    $ sudo apt update
    $ sudo apt install nginx
  • Cài đặt tường lửa: Trước khi chạy thử Nginx, cần phải cà đặt tường lửa cho phép truy cập vào các dịch vụ (services).
    • Nginx đã tự đăng ký dịch vụ ufw trong lúc cài đặt giúp truy cập vào Nginx truy cập dễ dàng. Liệt kê các cấu hình ứng dụng mà ufw bằng lệnh sau:
      $ sudo ufw app list
      # Output:
      Available applications:
        Nginx Full
        Nginx HTTP
        Nginx HTTPS
        OpenSSH
    • Có 3 cấu hình sẵn có 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)
    • Nên bật cấu hình hạn chế nhất vẫn cho phép lưu lượng truy cập mà đã định cấu hình. Chỉ cần cho phép lưu lượng truy cập trên cổng 80. Có thể kích hoạt tính năng này bằng cách thực hiện lệnh sau:
      $ sudo ufw allow 'Nginx HTTP'
      # You can verify the change by typing:
      $ sudo ufw status
      # Output
      Status: active
      
      To                         Action      From
      --                         ------      ----
      OpenSSH                    ALLOW       Anywhere                  
      Nginx HTTP                 ALLOW       Anywhere                  
      OpenSSH (v6)               ALLOW       Anywhere (v6)             
      Nginx HTTP (v6)            ALLOW       Anywhere (v6)
      
    • Làm tương tự như lệnh trên để bật các cấu hình còn lại của Nginx: 
      $ sudo ufw allow 'Nginx HTTPS'
      $ sudo ufw allow 'Nginx Full'
  • Xác minh rằng Nginx đã được cài đặt đúng cách bằng cách kiểm tra phiên bản phần mềm:
    $ nginx -v
    # Output:
    nginx version: nginx/1.18.0 (Ubuntu)
  • Kiểm tra trạng thái máy chủ Web Nginx
    $ 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 2020-04-20 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
  • Kiểm tra địa chỉ IP bên ngoài (External IP) của máy chủ:
    $ curl -4 icanhazip.com
    # Output:
    157.245.204.118
  • Sau đó mở trình duyệt với địa chỉ IP (External IP) vừa lấy được từ phía máy chủ (http://157.245.204.118) thì sẽ nhận được trang Landing Page mặc định của Nginx.
  • Hoặc sử dụng lệnh sau để kiểm tra Nginx đã chạy (trả về mã HTML trang Landing Page mặc định của Nginx):
    $ curl -i 157.245.204.118

Cấu hình máy chủ khối (Server Block)

Trong Nginx, máy chủ khối (Server Block) là một cấu hình hoạt động như một máy chủ của chính nó. Theo mặc định, Nginx có một khối máy chủ được cấu hình sẵn được đặt tại đường dẫn /var/www/html. Tuy nhiên, nó có thể được cấu hình với nhiều khối máy chủ cho các trang web khác nhau. Để cấu hình máy chủ khối, thực hiện các bước sau:

  • Tạo thư mục cho tên miền thử nghiệm:
    $ sudo mkdir -p /var/www/example.com/html
  • Xác định cấu hình quyền sở hữu:
    $ sudo chown -R $USER:$USER /var/www/example.com/html
    $ sudo chmod –R 755 /var/www/example.com
  • Tạo một tệp index.html cho Máy chủ khối:
    $ cd /var/www/example.com/html
    $ touch ./index.html
    $ sudo nano /var/www/example.com/html/index.html
  • Trong trình soạn thảo văn bản, hãy nhập mã HTML sau: 
    <html>
       <head>
          <title>Cấu hình máy chủ khối</title>
       </head>
       <body>
          <h1>Đây là tiêu đề cấu hình máy chủ khối</h1>
       </body>
    </html>
    Thực hiện mã lệnh xong ấn Ctrl + X để thoát khỏi ứng dụng nano:
    $ Save modified buffer? Y                                                          
     Y Yes
     N No           ^C Cancel
    $ File Name to Write: /var/www/example.com/html/index.html                        
    ^G Get Help         M-D DOS Format      M-A Append          M-B Backup File
    ^C Cancel           M-M Mac Format      M-P Prepend         ^T To Files
    Chọn Y và ấn phím Enter để lưu lại file.
  • Tạo cấu hình máy chủ khối:
    $ sudo nano /etc/nginx/sites-available/example.com
    Nhập đoạn cấu hình sau:
    server    {
      listen 80;
     
      root /var/www/example.com/html;
      index index.html index.htm index.nginx.debian.html;
     
      server_name test_domain.com www. example.com;
      location / {
        try_files $uri $uri/ =404;
      }
    }

    ấn Ctrl + X để thoát khỏi ứng dụng nano, ấn Enter để lưu lại tệp cấu hình

  • Tạo liên kết tượng trưng cho Nginx để đọc khi khởi động giữa khối máy chủ và thư mục khởi động bằng cách nhập lệnh sau: 

    $ sudo ln –s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
  • Kiểm thử cấu hình máy chủ Nginx:
    $ sudo nginx –t
    # Output:
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  •  Khởi động lại dịch vụ Ngnix:
    $ sudo systemctl restart nginx
  • Vào lại trình duyệt (như ở bước trên) để kiểm tra xem máy chủ khối đã chạy thành công

Quản lý tiến trình cơ bản của Nginx

  • Dừng máy chủ Web Nginx:
    $ sudo systemctl stop nginx
  • Khởi động máy chủ Web Nginx:
    $ sudo systemctl start nginx
  • Khởi động lại máy chủ Web Nginx:
    $ sudo systemctl restart nginx
  • Nếu chỉ thay đổi cấu hình, Nginx có thể tải lại (reload) mà không huỷ các kết nối có thể sử dụng lệnh:
    $ sudo systemctl reload nginx
  • Nginx được cấu hình để khởi động tự động khi máy chủ khởi động, nếu không muốn quá trình tự động này có thể tắt bằng lệnh:
    $ sudo systemctl disable nginx
  • Để bật chức năng khởi động tự động khi máy chủ khởi động sử dụng lệnh sau:
    $ sudo systemctl enable nginx