Lệnh sudo apt install nginx trên Ubuntu để cài đặt máy chủ Nginx
Máy Tính

Hướng Dẫn Chi Tiết Cài Đặt và Cấu Hình Nginx Reverse Proxy trên Ubuntu

Phong trào tự host (self-hosted) đang ngày càng phát triển mạnh mẽ, khi người dùng mong muốn giảm sự phụ thuộc vào các dịch vụ đám mây, đồng thời giữ an toàn dữ liệu của mình ngay trên mạng nội bộ. Tuy nhiên, sau khi triển khai một vài container, có thể với sự hỗ trợ của Portainer để đơn giản hóa việc quản lý, bạn sẽ gặp phải một vấn đề phổ biến. Việc truy cập từng dịch vụ riêng lẻ thông qua địa chỉ IP và cổng (port) riêng của chúng trở nên khó chịu nhanh chóng và là một rào cản lớn khi làm quen với các ứng dụng tự host.

Để giải quyết sự bất tiện này, việc thiết lập một reverse proxy cho phép bạn truy cập các ứng dụng tự host từ một địa chỉ IP duy nhất, giúp đơn giản hóa việc truy cập và quản lý. Mặc dù có nhiều tùy chọn khả thi để thực hiện điều này, một trong những cách phổ biến (và lâu đời nhất) là sử dụng Nginx. Đây là một giải pháp miễn phí, mã nguồn mở, dễ cài đặt và bạn sẽ có một reverse proxy hoạt động chỉ trong thời gian ngắn.

Nginx, thường được phát âm là “engine x”, không chỉ là một web server mạnh mẽ mà còn là một công cụ reverse proxy hiệu quả, đặc biệt phù hợp cho những ai muốn tối ưu hóa môi trường home lab hoặc hệ thống NAS cá nhân. Việc triển khai Nginx reverse proxy giúp cải thiện đáng kể trải nghiệm người dùng, tăng cường bảo mật và cung cấp khả năng mở rộng cho các dịch vụ tự host.

Lệnh sudo apt install nginx trên Ubuntu để cài đặt máy chủ NginxLệnh sudo apt install nginx trên Ubuntu để cài đặt máy chủ Nginx

I. Chuẩn Bị Trước Khi Bắt Đầu

Để thiết lập Nginx reverse proxy, bạn cần một số công cụ và kiến thức cơ bản về Linux. Quá trình này không quá phức tạp và có thể hoàn thành nhanh chóng nếu bạn đã quen thuộc với dòng lệnh.

Yêu cầu về Hệ thống và Kỹ năng Cơ bản

Chúng tôi giả định bạn đang sử dụng Ubuntu hoặc Ubuntu Server cho hướng dẫn này. Tuy nhiên, bạn có thể tìm thấy gói cài đặt Nginx cho hầu hết các bản phân phối Linux phổ biến khác.

  • Hệ điều hành: Ubuntu đã được cài đặt trên máy ảo, máy chủ vật lý, hoặc thiết bị NAS của bạn.
  • Quyền truy cập: Quyền sudo hoặc root là bắt buộc để thực hiện các lệnh cài đặt và cấu hình hệ thống.
  • Giao diện: Truy cập vào terminal hoặc giao diện dòng lệnh (CLI).

Nginx là một chương trình tuyệt vời cho bất kỳ ai muốn mở rộng home lab của mình và học hỏi các kỹ năng vận hành hệ thống chuyên nghiệp. Nó cũng là một trong những cách tốt nhất để tạo reverse proxy trên Ubuntu. Nginx đã tồn tại qua nhiều thập kỷ, liên tục được tối ưu hóa và bổ sung tính năng, cho phép nó được sử dụng cho việc cân bằng tải (load balancing), giải mã SSL (SSL offloading) và bảo vệ chống lại các cuộc tấn công DDoS.

Một số thiết bị NAS như TerraMaster F8 SSD Plus, F4-424 Max và Aiffro K100, minh họa môi trường tự host dịch vụMột số thiết bị NAS như TerraMaster F8 SSD Plus, F4-424 Max và Aiffro K100, minh họa môi trường tự host dịch vụ

II. Hướng Dẫn Cài Đặt Nginx trên Ubuntu

Việc cài đặt Nginx trên Ubuntu rất đơn giản và chỉ yêu cầu một vài lệnh trong terminal.

  1. Cập nhật kho lưu trữ hệ thống:
    Đảm bảo các kho lưu trữ gói (repositories) của bạn được cập nhật để tải phiên bản Nginx mới nhất.

    sudo apt update
  2. Cài đặt Nginx:
    Sử dụng lệnh sau để cài đặt Nginx.

    sudo apt install nginx
  3. Cấu hình Firewall (UFW) cho Nginx:
    Firewall trên Ubuntu là ufw (Uncomplicated Firewall). Nginx sẽ tự động đăng ký các dịch vụ của mình với ufw, giúp bạn dễ dàng cấu hình.

    • Xem danh sách ứng dụng đã đăng ký với ufw:
      sudo ufw app list

      Kết quả lệnh sudo ufw app list trên terminal Ubuntu Server, hiển thị các ứng dụng đã đăng ký với firewallKết quả lệnh sudo ufw app list trên terminal Ubuntu Server, hiển thị các ứng dụng đã đăng ký với firewallLệnh này có thể hiển thị một loạt các ứng dụng đã được cấu hình, với các tùy chọn phổ biến liên quan đến Nginx như:

      • Nginx Full: Cho phép cả lưu lượng HTTP (cổng 80) và HTTPS (cổng 443).
      • Nginx HTTP: Chỉ cho phép lưu lượng HTTP (cổng 80).
      • Nginx HTTPS: Chỉ cho phép lưu lượng HTTPS (cổng 443).
      • OpenSSH: Cho phép lưu lượng SSH vào máy chủ.
      • CUPS: Hệ thống in ấn Common Unix, xử lý các dịch vụ máy in trên mạng.
    • Cấp quyền cơ bản cho Nginx qua firewall: Ví dụ, nếu bạn muốn dịch vụ Nginx HTTP có quyền truy cập:
      sudo ufw allow 'Nginx HTTP'
    • Bật firewall nếu chưa bật:
      sudo ufw enable
    • Kiểm tra trạng thái firewall:
      sudo ufw status

      Cửa sổ terminal hiển thị kết quả lệnh sudo ufw status sau khi cấu hình firewall cho Nginx trên UbuntuCửa sổ terminal hiển thị kết quả lệnh sudo ufw status sau khi cấu hình firewall cho Nginx trên Ubuntu

  4. Kiểm tra Trạng thái Nginx:
    Trước khi tiếp tục, hãy đảm bảo Nginx đang chạy.

    sudo systemctl status nginx

    Hiển thị trạng thái "active (running)" của Nginx trên Ubuntu Server qua lệnh systemctl statusHiển thị trạng thái "active (running)" của Nginx trên Ubuntu Server qua lệnh systemctl statusKết quả phải hiển thị active (running) màu xanh. Nếu không, hãy khởi động Nginx bằng:

    sudo systemctl start nginx

Kiểm tra Trang Chào mừng Nginx

Bạn có thể xác minh Nginx đã được cài đặt và đang chạy bằng cách truy cập địa chỉ IP của máy chủ của bạn trong bất kỳ trình duyệt web nào trên mạng cục bộ. Ví dụ: HTTP://192.168.7.171. Nếu bạn thấy văn bản “Welcome to nginx!” như hình dưới, nghĩa là bạn đã cài đặt thành công.

Trang chào mừng "Welcome to nginx!" hiển thị khi truy cập IP máy chủ sau khi cài đặt Nginx thành côngTrang chào mừng "Welcome to nginx!" hiển thị khi truy cập IP máy chủ sau khi cài đặt Nginx thành công

III. Thiết Lập Nginx Reverse Proxy Cơ Bản

Bây giờ là lúc để thiết lập reverse proxy. Đầu tiên, chúng ta cần dọn dẹp một chút vì cài đặt mặc định của Nginx có thể gây cản trở.

  1. Gỡ liên kết file cấu hình mặc định:

    sudo unlink /etc/nginx/sites-enabled/default

    Lệnh này sẽ xóa symbolic link của file cấu hình mặc định trong thư mục sites-enabled.

  2. Tạo file cấu hình mới:
    Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào bạn cảm thấy thoải mái (ví dụ: nano, vim). Chúng tôi sẽ dùng vim trong ví dụ này.

    sudo vim /etc/nginx/sites-available/reverse-proxy
  3. Thêm cấu hình reverse proxy cơ bản:
    Đây là một cấu hình cơ bản để bắt đầu.

    server {
        listen 80;
        server_name localhost;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Ví dụ cấu hình cơ bản cho Nginx reverse proxy trong file sites-available/reverse-proxyVí dụ cấu hình cơ bản cho Nginx reverse proxy trong file sites-available/reverse-proxyFile này chứa chi tiết về một reverse proxy đơn lẻ đến một dịch vụ. Khối server {...} xử lý mọi yêu cầu khớp với các chi tiết này. Bạn sẽ cần thay thế localhost bằng tên miền thực tế và 127.0.0.1:8000 bằng địa chỉ IP và cổng của dịch vụ tự host của bạn.

    • listen 80;: Cấu hình cổng mà reverse proxy sẽ lắng nghe. Bạn không nhất thiết phải sử dụng cổng 80, nhưng đôi khi nó dễ dàng hơn.
    • server_name localhost;: Thay thế localhost bằng tên miền mà bạn muốn sử dụng để truy cập ứng dụng tự host của mình (ví dụ: app.mydomain.com).
    • location / {...}: Cấu hình đường dẫn URI để khớp với mọi yêu cầu đến. location / sẽ khớp với tất cả các yêu cầu.
    • proxy_pass http://127.0.0.1:8000;: Đây là địa chỉ máy chủ backend mà Nginx sẽ proxy tới. Thay đổi nó thành IP và cổng chính xác cho container Docker hoặc dịch vụ khác mà bạn đang chuyển hướng thông tin đến.
    • *`proxy_set_header ;`**: Các dòng này thiết lập các HTTP header cho yêu cầu được proxy, bao gồm thông tin bổ sung về yêu cầu của client. Điều này rất quan trọng để ứng dụng backend nhận diện đúng thông tin từ người dùng ban đầu.

Sau khi bạn đã lưu và thoát khỏi trình soạn thảo (ví dụ: :wq trong vim), đã đến lúc kích hoạt và kiểm tra proxy.

IV. Kiểm Tra và Kích Hoạt Reverse Proxy

Bây giờ chúng ta sẽ đưa tất cả vào thực tế, để các yêu cầu dữ liệu đến ứng dụng tự host của chúng ta được định tuyến một cách phù hợp.

  1. Tạo symbolic link cho file cấu hình:
    sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/

    Lệnh này tạo một symbolic link trong thư mục sites-enabled, đảm bảo Nginx sẽ tải cấu hình mới của bạn. Việc này cho phép bạn thay đổi cấu hình bằng cách chỉnh sửa file trong sites-available và đơn giản chỉ cần xóa (hoặc tạo lại) symbolic link nếu cần.

  2. Kiểm tra cú pháp Nginx:
    Luôn kiểm tra cú pháp của cấu hình Nginx trước khi khởi động lại dịch vụ để tránh lỗi.
    sudo nginx -t

    Kết quả kiểm tra cú pháp Nginx thành công với thông báo "syntax is ok" và "test is successful"Kết quả kiểm tra cú pháp Nginx thành công với thông báo "syntax is ok" và "test is successful"Nếu mọi thứ đều đúng, bạn sẽ thấy thông báo “syntax is ok” và “test is successful”.

  3. Khởi động lại máy chủ Nginx:
    Để áp dụng các thay đổi, bạn cần khởi động lại dịch vụ Nginx.
    sudo systemctl restart nginx

V. Kiểm Chứng Định Tuyến Hoạt Động

Để xem mọi thứ có đang hoạt động như mong đợi hay không, chúng ta có thể tạo một trang web nhỏ để chứng minh định tuyến localhost. Nếu bạn đã có file cấu hình trỏ đến một container Docker đã được cấu hình trước với một ứng dụng tự host, bạn có thể bỏ qua bước này và chuyển sang việc kiểm tra trực tiếp bằng trình duyệt.

  1. Tạo thư mục trang thử nghiệm:
    sudo mkdir example_backend && cd example_backend
  2. Tạo một file HTML đơn giản:
    sudo vim index.html
  3. Thêm mã HTML cơ bản:
    <title>NGINX backend</title><h1>It works!</h1>
  4. Lưu và đóng file với :wq.
  5. Chạy máy chủ backend từ cùng thư mục:
    sudo python3 -m http.server 8000

    Lệnh này sẽ chạy một máy chủ HTTP đơn giản trên cổng 8000.

  6. Mở trình duyệt web và truy cập địa chỉ IP của máy chủ (ví dụ: http://192.168.7.171).
    Bạn sẽ thấy trang “It works!” mà bạn vừa tạo.
    Trang web &quot;It works!&quot; hiển thị thông qua Nginx reverse proxy, xác nhận định tuyến hoạt động chính xácTrang web "It works!" hiển thị thông qua Nginx reverse proxy, xác nhận định tuyến hoạt động chính xác

Như bạn thấy, reverse proxy chặn yêu cầu của client và chuyển tiếp nó đến máy chủ backend. Sau đó, backend phản hồi với trang web, và chúng ta biết rằng reverse proxy đã được thiết lập đúng cách. Nếu bạn trỏ đến một dịch vụ tự host hiện có, trang web hiển thị sẽ là trang quản trị của dịch vụ đó thay vì trang thử nghiệm.

Nginx Reverse Proxy Cơ Bản Đã Hoạt Động!

Đây chỉ là bước khởi đầu cho những gì Nginx có thể làm. Ngoài việc định tuyến cơ bản, Nginx còn có thể thực hiện cân bằng tải (load balancing), mã hóa và giải mã SSL để giảm tải cho các dịch vụ của bạn, xử lý bảo mật như danh sách kiểm soát truy cập (ACL) và lọc, và lưu trữ dữ liệu vào bộ nhớ đệm (cache) để truy cập nhanh hơn. Tuy nhiên, đó đều là những công cụ nâng cao, và việc thiết lập reverse proxy để truy cập mọi ứng dụng tự host từ cùng một địa chỉ IP là mục tiêu chính của chúng ta ở đây.

Việc nắm vững cách cấu hình Nginx reverse proxy không chỉ giúp bạn quản lý các ứng dụng tự host hiệu quả hơn mà còn là một kỹ năng quan trọng trong việc xây dựng và duy trì hạ tầng mạng an toàn, ổn định. Hãy tiếp tục khám phá tiềm năng của Nginx để tối ưu hóa môi trường công nghệ của bạn.

Bạn đã thành công trong việc thiết lập Nginx reverse proxy? Chia sẻ kinh nghiệm của bạn hoặc đặt câu hỏi trong phần bình luận bên dưới!

Related posts

10 Phụ Kiện Máy In 3D Độc Đáo Bạn Có Thể Tự In Ngay Tại Nhà

Administrator

Biến PC Chơi Game Thành Console Hoàn Hảo Để Thưởng Thức Trên TV

Administrator

Bảo Vệ Dữ Liệu Tối Đa: Các Phương Pháp Sao Lưu Máy Chủ Gia Đình Ra Ngoài Site Hiệu Quả

Administrator