Máy Tính

Cách Cài Đặt Nginx Reverse Proxy trên Ubuntu: Hướng Dẫn Chi Tiết A-Z

Hình ảnh các thiết bị NAS từ TerraMaster và Aiffro, minh họa môi trường tự host dịch vụ

Xu hướng tự host (self-hosted) các dịch vụ cá nhân đang ngày càng trở nên phổ biến, khi người dùng mong muốn giảm sự phụ thuộc vào các dịch vụ đám mây và giữ dữ liệu của mình an toàn trên mạng nội bộ. Tuy nhiên, sau khi đã triển khai một vài ứng dụng qua Docker container hoặc các dịch vụ khác, một vấn đề chung thường phát sinh: 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 biệt trở nên rườm rà và gây khó chịu. Điều này tạo ra rào cản đáng kể, khiến người dùng gặp khó khăn trong việc làm quen với các ứng dụng tự host.

Để khắc phục bất tiện này, việc thiết lập một reverse proxy cho phép bạn truy cập tất cả các ứng dụng tự host của mình 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 giải pháp khả thi để thực hiện điều này, Nginx (phát âm là “engine x”) là một trong những cách phổ biến và lâu đời nhất. Nginx miễn phí, mã nguồn mở, dễ cài đặt và bạn có thể thiết lập một reverse proxy hoạt động hiệu quả chỉ trong thời gian ngắn. Bài viết này của blogcongnghe.net sẽ hướng dẫn bạn chi tiết cách cài đặt Nginx Reverse Proxy trên Ubuntu.

I. Chuẩn Bị Trước Khi Cài Đặt Nginx Reverse Proxy

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

Để bắt đầu, hãy đảm bảo bạn có những yếu tố sau:

  • 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 sudo hoặc root: Để thực hiện các lệnh quản trị hệ thống.
  • Truy cập vào Terminal (thiết bị đầu cuối) hoặc Command Line Interface (CLI): Để nhập các lệnh cài đặt và cấu hình.

Hình ảnh các thiết bị NAS từ TerraMaster và Aiffro, minh họa môi trường tự host dịch vụHình ảnh các thiết bị NAS từ TerraMaster và Aiffro, minh họa môi trường tự host dịch vụ

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

Nginx là một chương trình tuyệt vời cho bất kỳ ai muốn mở rộng phòng thí nghiệm tại nhà (home lab) và học hỏi các kỹ năng về quản trị sản xuất. Đây cũng là một trong những cách tốt nhất để tạo ra một reverse proxy trên Ubuntu. Nginx đã tồn tại hàng thập kỷ, đượ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 (load balancing), giảm tải 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. Cập Nhật Hệ Thống và Cài Đặt Nginx

Đầu tiên, hãy đảm bảo rằng các kho lưu trữ gói đã được cập nhật và sau đó cài đặt Nginx.

  1. Cập nhật kho lưu trữ gói hệ thống:
    sudo apt update
  2. Cài đặt Nginx:
    sudo apt install nginx

Màn hình terminal hiển thị lệnh cài đặt Nginx trên Ubuntu bằng sudo apt install nginxMàn hình terminal hiển thị lệnh cài đặt Nginx trên Ubuntu bằng sudo apt install nginx

2. Cấu Hình Tường Lửa UFW cho 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 dịch vụ của nó, giúp bạn dễ dàng hơn trong việc cấu hình. Lệnh dưới đây sẽ liệt kê các ứng dụng đã được cấu hình sẵn.

  1. Liệt kê các cấu hình ứng dụng UFW có sẵn:

    sudo ufw app list

    Màn hình terminal Ubuntu Server hiển thị danh sách ứng dụng tường lửa UFW với lệnh sudo ufw app listMàn hình terminal Ubuntu Server hiển thị danh sách ứng dụng tường lửa UFW với lệnh sudo ufw app list

    Bạn có thể thấy 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 nhất bao gồm:

    • CUPS: Common Unix Printing System, xử lý các dịch vụ in trên mạng.
    • Nginx Full: Kích hoạt toàn bộ máy chủ web Nginx với cả lưu lượng HTTP và HTTPS.
    • 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ờ, chúng ta cần cấp quyền cơ bản để các dịch vụ này có thể hoạt động trên máy chủ và cho reverse proxy khi chúng ta thiết lập nó.

  2. Cấp quyền truy cập cho dịch vụ Nginx (ví dụ: HTTP):

    sudo ufw allow 'Nginx HTTP'
  3. Đảm bảo tường lửa đã được bật:

    sudo ufw enable
  4. Kiểm tra trạng thái tường lửa:

    sudo ufw status

    Kết quả lệnh sudo ufw status trong cửa sổ terminal, xác nhận trạng thái tường lửa đã được kích hoạtKết quả lệnh sudo ufw status trong cửa sổ terminal, xác nhận trạng thái tường lửa đã được kích hoạt

3. Kiểm Tra Trạng Thái Hoạt Động của Nginx

Trước khi tiếp tục, điều cuối cùng là đảm bảo Nginx đang chạy.

  1. Kiểm tra trạng thái Nginx:

    sudo systemctl status nginx

    Dòng lệnh trong Ubuntu Server hiển thị trạng thái Nginx đang hoạt động (active running)Dòng lệnh trong Ubuntu Server hiển thị trạng thái Nginx đang hoạt động (active running)

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

    sudo systemctl start nginx

4. Xác Thực Cài Đặt Nginx qua Trình Duyệt

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. Ví dụ, nếu địa chỉ IP của máy chủ là 192.168.7.171, bạn sẽ truy cập http://192.168.7.171. Nếu bạn thấy dòng chữ “Welcome to nginx!”, nghĩa là bạn đã cài đặt thành công.

Trang chào mừng mặc định "Welcome to Nginx!" hiển thị trên trình duyệt, xác nhận Nginx đã được cài đặt thành côngTrang chào mừng mặc định "Welcome to Nginx!" hiển thị trên trình duyệt, xác nhận Nginx đã được cài đặt thành công

III. Thiết Lập Reverse Proxy Cụ Thể với Nginx

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

1. Dọn Dẹp Cấu Hình Mặc Định

  1. Hủy liên kết tệp cấu hình mặc định:
    sudo unlink /etc/nginx/sites-enabled/default

2. Tạo File Cấu Hình Reverse Proxy Mới

  1. Tạo 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 thấy thoải mái (ví dụ: vim, nano):

    sudo vim /etc/nginx/sites-available/reverse-proxy
  2. Chèn cấu hình cơ bản sau vào tệp để 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 tệp reverse-proxy.conf, hiển thị khối server và proxy_passVí dụ cấu hình Nginx Reverse Proxy cơ bản trong tệp reverse-proxy.conf, hiển thị khối server và proxy_pass

    Tệp 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 phù hợp với các chi tiết này. Bạn sẽ cần sử dụng địa chỉ IP và tên máy chủ thực tế của các dịch vụ tự host của mình 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 / {...}: 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 tiếp thông tin đến.
    • *`proxy_set_header `**: Các lệnh này đặt 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.

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

IV. Kiểm Tra và Kích Hoạt Nginx 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. Liên Kết File Cấu Hình

  1. Đầu tiên, chúng ta phải liên kết tệp cấu hình 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, giúp chúng ta có một tệp cấu hình 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. Kiểm Tra Cú Pháp Cấu Hình

  1. Kiểm tra cú pháp của cấu hình Nginx:

    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"

3. Khởi Động Lại Nginx

  1. Khởi động lại máy chủ Nginx để áp dụng các thay đổi:
    sudo systemctl restart nginx

V. Kiểm Tra Định Tuyến Reverse Proxy (Tùy Chọn)

Để 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 này và chuyển đến bước sử dụng curl để kiểm tra định tuyến. Hoặc đơn giản là 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 thư mục trang thử nghiệm:

    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ạ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ủ của bạn (không kèm theo cổng 8000, vì Nginx đang lắng nghe trên cổng 80 và sẽ định tuyến).

    Trang web &quot;It works!&quot; hiển thị trong trình duyệt, chứng tỏ Nginx Reverse Proxy đã định tuyến thành công đến dịch vụ backendTrang web "It works!" hiển thị trong trình duyệt, chứng tỏ Nginx Reverse Proxy đã định tuyến thành công đến dịch vụ backend

    Như bạn thấy, reverse proxy chặn yêu cầu của máy khách và chuyển tiếp nó đến máy chủ backend. Sau đó, backend phản hồi bằng trang web, và chúng ta biết rằng reverse proxy đã được thiết lập chính xác. Nếu bạn đang 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ụ đó.

Kết Luận

Với hướng dẫn chi tiết này, bạn đã thành công cài đặt và cấu hình một Nginx Reverse Proxy cơ bản trên Ubuntu. Đây mới chỉ là khởi đầu của những gì Nginx có thể làm. Nền tảng mạnh mẽ này còn có khả năng 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 (access control lists) và lọc, cũng như lưu trữ dữ liệu cache để truy cập nhanh hơn.

Tuy nhiên, đó là những công cụ nâng cao. Mục tiêu chính của chúng ta ở đây là thiết lập reverse proxy để truy cập mọi ứng dụng tự host từ cùng một địa chỉ IP, giúp cuộc sống công nghệ của bạn trở nên đơn giản và hiệu quả hơn. Hãy tiếp tục theo dõi blogcongnghe.net để khám phá thêm nhiều hướng dẫn và kiến thức công nghệ hữu ích khác! Nếu có bất kỳ câu hỏi hoặc kinh nghiệm nào muốn chia sẻ, đừng ngần ngại để lại bình luận bên dưới nhé.

Related posts

Top 4 Phần Mềm Điều Khiển Máy Tính Từ Xa Tốt Nhất 2024: Lựa Chọn Nào Phù Hợp Với Bạn?

Administrator

Ổ cứng ngoài Seagate Expansion 26TB: Dung lượng khủng, giá trị vượt trội

Administrator

Lỗi Nghiêm Trọng: Windows 11 Không Khởi Động Sau Cập Nhật KB5058405

Administrator