Máy Tính

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

Hình ảnh chụp màn hình lệnh `sudo apt install nginx` trên Ubuntu để bắt đầu cài đặt

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 trong mạng nội bộ. Tuy nhiên, sau khi bạn đã triển khai một vài container, có thể là với Portainer để đơn giản hóa việc quản lý, một vấn đề chung thường nảy sinh. Việc truy cập từng dịch vụ riêng lẻ thông qua địa chỉ IP và cổng riêng của chúng trở nên khó chịu và tạo ra rào cản lớn khi cố gắng 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 lựa 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 (phát âm là “engine x”). Đây là một giải pháp miễn phí, mã nguồn mở và dễ cài đặt, giúp bạn có ngay một reverse proxy hoạt động hiệu quả chỉ trong thời gian ngắn.

Chuẩn Bị Trước Khi Bắt Đầu Cài Đặt Nginx Reverse Proxy

Yêu Cầu Hệ Thống: Ubuntu, Quyền Sudo và Truy Cập Dòng Lệnh

Thiết lập Nginx sẽ không mất quá nhiều thời gian và tất cả những gì bạn cần là một số kỹ năng cơ bản về dòng lệnh. Chúng tôi giả định bạn đã cài đặt Ubuntu hoặc Ubuntu Server cho hướng dẫn này, nhưng bạn có thể tìm thấy gói Nginx cho bản phân phối Linux ưa thích của mình.

  • Hệ điều hành Ubuntu đã được cài đặt trên máy ảo, máy chủ hoặc NAS của bạn.
  • quyền sudo hoặc root để thực hiện các lệnh quản trị.
  • Truy cập vào terminal hoặc giao diện dòng lệnh (CLI).

Hình ảnh chụp màn hình lệnh `sudo apt install nginx` trên Ubuntu để bắt đầu cài đặtHình ảnh chụp màn hình lệnh `sudo apt install nginx` trên Ubuntu để bắt đầu cài đặt

Cài Đặt Nginx Reverse Proxy Trên Ubuntu: Hướng Dẫn Chi Tiết

Tối Ưu Hóa Home Lab với Nginx

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. Đây 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 được vài thập kỷ, nên nó đã được tối ưu hóa và bổ sung nhiều tính năng, có thể được sử dụng cho cân bằng tải, giải mã SSL (SSL offloading) và bảo vệ chống lại các cuộc tấn công DDoS.

Để cài đặt Nginx trên Ubuntu, tất cả những gì chúng ta cần là terminal.

  1. Đảm bảo các kho lưu trữ gói được cập nhật bằng cách chạy lệnh sau:
    sudo apt update
  2. Cài đặt Nginx với lệnh sau:
    sudo apt install nginx
  3. Bây giờ, là lúc để cấu hình tường lửa. Chạy lệnh sau:
    sudo ufw app list

Giao diện terminal Ubuntu Server hiển thị danh sách ứng dụng ufw sau khi cài đặt NginxGiao diện terminal Ubuntu Server hiển thị danh sách ứng dụng ufw sau khi cài đặt Nginx

Tường lửa trên Ubuntu là ufw (Uncomplicated Firewall), và Nginx sẽ tự động đăng ký các cấu hình của mình để công việc cấu hình của bạn dễ dàng hơn. Lệ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 ứng dụng phổ biến nhất dưới đây:

  • CUPS: Common Unix Printing System, xử lý các dịch vụ máy in trên mạng.
  • Nginx Full: Máy chủ web Nginx đầy đủ với cả lưu lượng HTTP và HTTPS được bật.
  • Nginx HTTP: Chỉ cho phép lưu lượng HTTP.
  • Nginx HTTPS: Chỉ cho phép lưu lượng HTTPS.
  • OpenSSH: Cho phép lưu lượng SSH vào máy chủ.

Bây giờ là lúc cấp một số quyền cơ bản để các dịch vụ này có thể hoạt động trên máy chủ và reverse proxy sau khi chúng ta thiết lập.

  1. Ví dụ, nếu chúng ta muốn dịch vụ Nginx HTTP có quyền truy cập, chúng ta gõ:
    sudo ufw allow 'Nginx HTTP'
  2. Bây giờ chúng ta phải đảm bảo tường lửa được bật với:
    sudo ufw enable
  3. Và cuối cùng, kiểm tra xem dịch vụ đã được thiết lập chưa với:
    sudo ufw status

Màn hình terminal Ubuntu hiển thị kết quả lệnh `sudo ufw status` sau khi cấu hình NginxMàn hình terminal Ubuntu hiển thị kết quả lệnh `sudo ufw status` sau khi cấu hình Nginx

Điều cuối cùng trước khi chúng ta tiếp tục là đảm bảo Nginx đang chạy:

sudo systemctl status nginx

Giao diện dòng lệnh trong Ubuntu Server hiển thị trạng thái đang hoạt động của NginxGiao diện dòng lệnh trong Ubuntu Server hiển thị trạng thái đang hoạt động của Nginx

Nó sẽ hiển thị trạng thái active (running) màu xanh lá cây. Nếu không, hãy khởi động Nginx với:

sudo systemctl start nginx

Kiểm Tra Trang Chào Mừng Nginx

Bạn cũng 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ủ trong bất kỳ trình duyệt web nào trên mạng cục bộ của bạn. Trong ví dụ ở đây, đó là HTTP://192.168.7.171. Nếu bạn thấy văn bản “Welcome to nginx!” như hình trên, thì bạn đã cài đặt Nginx chính xác.

Trang chào mừng của Nginx hiển thị trên trình duyệt web, xác nhận cài đặt thành côngTrang chào mừng của Nginx hiển thị trên trình duyệt web, xác nhận cài đặt thành công

Thiết Lập Cấu Hình Reverse Proxy Với Nginx

Điều đầu tiên chúng ta cần làm là một số công việc dọn dẹp vì các cài đặt Nginx mặc định sẽ gây cản trở.

  1. Hủy liên kết tệp cấu hình mặc định bằng cách gõ:

    sudo unlink /etc/nginx/sites-enabled/default
  2. Bây giờ, chúng ta cần một tệp 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 ở đây:

    sudo vim /etc/nginx/sites-available/reverse-proxy
  3. Đây là cấu hình cơ bản để 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 Nginx reverse proxy cơ bản trong trình soạn thảo VimVí dụ cấu hình Nginx reverse proxy cơ bản trong trình soạn thảo Vim

Tệp này chứa chi tiết của một reverse proxy đơn lẻ đến một dịch vụ. Khối server {...} xử lý bất kỳ yêu cầu nào khớp với các chi tiết này. Bạn sẽ muốn sử dụng địa chỉ IP thực và tên máy chủ của các dịch vụ tự host của mình ở đây thay vì các chi tiết giữ chỗ:

  • listen 80;: Cấu hình cổng mà reverse proxy 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 hoặc địa chỉ IP của ứng dụng tự host của bạn.
  • location / {...}: Điều này cấu hình đường dẫn URI để khớp với bất kỳ yêu cầu đến nào.
  • proxy_pass http://127.0.0.1:8000;: Đây là địa chỉ máy chủ backend mà Nginx đang proxy tới. Thay đổi nó thành IP và cổng chính xác cho bất kỳ Docker container hoặc dịch vụ nào khác mà bạn đang chuyển thông tin tới.
  • proxy_set_header ...;: Các dòng này thiết lập các tiêu đề HTTP cho yêu cầu được proxy, bao gồm thông tin bổ sung về yêu cầu của máy khách.

Khi bạn đã lưu và thoát khỏi vim, đã đến lúc kích hoạt và kiểm tra proxy.

Kiểm Tra và Áp Dụng Cấu Hình Nginx Reverse Proxy

Xác Minh Hoạt Động Của Reverse Proxy

Bây giờ để đư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 phù hợp.

  1. Đầu tiên, chúng ta phải liên kết tệp cấu hình mà chúng ta vừa tạo:
    sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/

    Lệnh này tạo một liên kết tượng trưng (symbolic link) trong thư mục sites-enabled để chúng ta có một tệp cấu hình mà chúng ta có thể thay đổi bằng cách đơn giản xóa các liên kết tượng trưng thay vì vô tình chỉnh sửa trực tiếp tệp gốc.

  2. Bây giờ kiểm tra cú pháp với:
    sudo nginx -t

Màn hình terminal hiển thị kết quả kiểm tra cú pháp Nginx thành côngMàn hình terminal hiển thị kết quả kiểm tra cú pháp Nginx thành công

  1. Và khởi động lại máy chủ Nginx để áp dụng các thay đổi của chúng ta:
    sudo systemctl restart nginx

Kiểm Tra Định Tuyến Hoạt Động Của Reverse Proxy

Để xem mọi thứ có đang được chuyển tiếp như mong đợi hay không, chúng ta có thể tạo một trang web nhỏ hiển thị hoạt động định tuyến localhost. Nếu bạn đã có tệp cấu hình trỏ đến một Docker container đã được cấu hình trước đó với một ứng dụng tự host, bạn có thể bỏ qua bước sử dụng curl để kiểm tra định tuyến. Hoặc, bạn chỉ cần nhập địa chỉ IP và cổng của ứng dụng tự host vào trình duyệt web, và nó sẽ hiển thị.

  1. Tạo một thư mục trang kiểm tra với:
    sudo mkdir example_backend && cd example_backend
  2. Tạo một tệp HTML đơn giản để làm trang đích:
    sudo vim index.html
  3. Thêm một số mã cơ bản để hiển thị:
    <title>NGINX backend</title><h1>It works!</h1>
  4. Lưu và đóng tệp với :wq.
  5. Bây giờ chúng ta chạy máy chủ backend từ cùng thư mục:
    sudo python3 -m http.server 8000
  6. Mở trình duyệt web và truy cập địa chỉ IP của máy chủ và cổng 8000.

Hình ảnh cho thấy Nginx đã proxy thành công yêu cầu tới backend server và hiển thị trang &quot;It works!&quot;Hình ảnh cho thấy Nginx đã proxy thành công yêu cầu tới backend server và hiển thị trang "It works!"

Như bạn có thể thấy, reverse proxy chặn yêu cầu từ máy khách 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 đang trỏ đến một dịch vụ tự host hiện có, trang web sẽ là trang quản trị cho dịch vụ đó.

Giờ đây, bạn đã có một reverse proxy cơ bản được thiết lập trong Nginx

Đây mới chỉ là khởi đầu của những gì Nginx có thể làm, vì nó có thể thực hiện cân bằng tải, 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, cũng như bộ nhớ đệm dữ liệu để truy cập nhanh hơn. Nhưng tất cả những điều đó đều là các 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 lúc này.

Related posts

OpenAI Giới Thiệu Operator: Trợ Lý AI Tự Động Hóa Tác Vụ Trực Tuyến

Administrator

Q-Dir: Giải Pháp Quản Lý Tệp Tin Miễn Phí Đáng Thử Cho Windows 11

Administrator

Kéo Dài Tuổi Thọ PC Windows 10: Tại Sao Linux Là Lựa Chọn Tối Ưu Khi Hết Hỗ Trợ?

Administrator