Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
Nginx Proxy Manager là gì? Cài bằng Docker và cấp SSL

Nginx Proxy Manager là gì? Cài bằng Docker và cấp SSL

Chuyên viên Kỹ thuật ProxyVN 09-15-2026 Đang tính... phút đọc

Nginx Proxy Manager là giao diện web giúp anh em dựng reverse proxy trên nền Nginx mà không cần viết tệp cấu hình bằng tay. Công cụ chạy trong Docker, cho phép trỏ nhiều tên miền vào nhiều dịch vụ trong mạng nội bộ và xin chứng chỉ SSL miễn phí chỉ bằng vài cú bấm. Lưu ý đây là reverse proxy đón truy cập vào máy chủ, không phải proxy để ẩn IP khi lướt web. Bài này ProxyVN hướng dẫn từ cài đặt tới vận hành. Tham khảo dịch vụ tại ProxyVN.

Tổng quan về Nginx Proxy Manager

Trước khi cài, anh em nên hiểu công cụ này làm gì và không làm gì. Phần lớn các lỗi người mới gặp đến từ việc kỳ vọng sai, ví dụ tưởng nó là proxy đổi IP hoặc tưởng nó thay được tường lửa.

Công cụ này giải quyết bài toán gì

Một máy chủ tại nhà hay một VPS thường chạy nhiều dịch vụ cùng lúc: trang quản lý ảnh, công cụ tự động hoá, bảng theo dõi, trang web cá nhân. Mỗi dịch vụ lắng nghe ở một cổng riêng như 8080, 3000, 5678. Người dùng bên ngoài không muốn gõ địa chỉ kèm cổng, và anh em cũng không muốn mở hàng loạt cổng ra Internet.

Reverse proxy giải bài toán đó bằng cách đứng ở cổng 80 và 443, đọc tên miền trong yêu cầu rồi chuyển tới đúng dịch vụ phía sau. Nếu anh em chưa nắm khái niệm này, bài reverse proxy là gì và ứng dụng ra sao giải thích nền tảng khá kỹ. Nginx Proxy Manager chỉ là lớp giao diện bọc ngoài Nginx, phần chuyển tiếp vẫn do Nginx làm.

Các tính năng chính

Theo trang giới thiệu chính thức của Nginx Proxy Manager, dự án tập trung vào việc giúp người không rành Nginx vẫn dựng được reverse proxy có SSL. Danh sách tính năng gồm:

  • Giao diện quản trị đẹp, dựa trên bộ giao diện Tabler.
  • Tạo tên miền chuyển tiếp, chuyển hướng, luồng TCP/UDP và trang 404 mà không cần biết cú pháp Nginx.
  • Chứng chỉ SSL miễn phí từ Let's Encrypt, hoặc tải lên chứng chỉ riêng.
  • Access List và xác thực HTTP cơ bản cho từng host.
  • Ô cấu hình Nginx nâng cao cho người dùng thành thạo.
  • Quản lý nhiều người dùng, phân quyền và nhật ký thao tác.

Dự án mã nguồn mở theo giấy phép MIT, kho Nginx Proxy Manager trên GitHub có khoảng 34 nghìn sao. Con số này cho thấy cộng đồng dùng rất đông, gặp lỗi gì thì gần như luôn có người hỏi trước.

Phân biệt với proxy để đổi IP

Nhiều anh em tìm từ khoá này vì thấy chữ "proxy" và nghĩ có thể dùng để đổi IP khi vào mạng xã hội. Đó là hai thứ khác hẳn nhau. Forward proxy đứng phía người dùng, thay IP của anh em khi đi ra ngoài. Reverse proxy đứng phía máy chủ, nhận truy cập từ ngoài vào rồi phân phối.

Bài phân biệt forward proxy và reverse proxy có bảng so sánh chi tiết. Tóm gọn lại: cài Nginx Proxy Manager không làm IP của anh em thay đổi khi lướt web. Nó chỉ giúp người khác truy cập dịch vụ của anh em gọn gàng và an toàn hơn.

Cách Nginx Proxy Manager hoạt động bên trong

Một cổng vào cho nhiều dịch vụ

Một cổng vào cho nhiều dịch vụ

Hiểu cơ chế bên trong giúp anh em sửa lỗi nhanh hơn rất nhiều. Khi trang báo 502 hay SSL không cấp được, biết được tệp nào được sinh ra và nằm ở đâu là đã đi được nửa đường.

Giao diện sinh ra tệp cấu hình Nginx

Mỗi lần anh em tạo hoặc sửa một Proxy Host trên giao diện, ứng dụng ghi thông tin vào cơ sở dữ liệu rồi sinh ra một tệp cấu hình Nginx tương ứng. Sau đó nó nạp lại Nginx để áp dụng. Các tệp này nằm trong thư mục dữ liệu được gắn ra ngoài container, thường là `data/nginx/proxy_host/`, mỗi host một tệp đánh số theo ID.

Điều này có hai hệ quả. Thứ nhất, anh em có thể đọc tệp đó để xem Nginx thực sự nhận cấu hình gì. Thứ hai, không nên sửa tay các tệp này vì lần lưu tiếp theo trên giao diện sẽ ghi đè lên.

Ba cổng mặc định

Container dùng ba cổng, mỗi cổng một vai trò rõ ràng:

  • Cổng 80: nhận truy cập HTTP công khai, đồng thời phục vụ bước xác minh tên miền của Let's Encrypt.
  • Cổng 443: nhận truy cập HTTPS công khai.
  • Cổng 81: giao diện quản trị.

Cổng 81 là cổng nhạy cảm nhất. Nếu máy chủ là VPS có IP công khai, anh em nên chặn cổng 81 bằng tường lửa và chỉ mở cho IP của mình. Phần bảo mật phía dưới sẽ nói kỹ hơn.

Cơ sở dữ liệu và chứng chỉ

Từ các bản gần đây, cấu hình mặc định dùng SQLite lưu trong thư mục data, không cần dựng thêm MySQL. Chứng chỉ SSL nằm ở thư mục letsencrypt. Hai thư mục này là toàn bộ "trí nhớ" của hệ thống. Mất chúng là mất hết host, người dùng, chứng chỉ, nên sao lưu hai thư mục này là việc quan trọng nhất khi vận hành.

Chuẩn bị trước khi cài Nginx Proxy Manager

Phần chuẩn bị chiếm ít thời gian nhưng quyết định việc cấp SSL có trơn tru hay không. Rất nhiều người cài xong mới phát hiện cổng 80 bị chặn hoặc tên miền chưa trỏ về.

Yêu cầu phần cứng và hệ điều hành

Công cụ khá nhẹ, một VPS 1 vCPU, 1 GB RAM là đủ cho vài chục host. Máy chủ cần cài Docker và plugin Docker Compose. Theo trang hướng dẫn cài đặt, image hỗ trợ hai kiến trúc amd64 và arm64. Kiến trúc armv7 không còn được hỗ trợ từ bản 2.14 trở đi vì Node.js đã bỏ armhf, máy armv7 phải dùng tag 2.13.7.

Điểm này đáng chú ý với anh em dùng Raspberry Pi đời cũ chạy hệ điều hành 32 bit. Nếu kéo image bản mới mà container không chạy, hãy kiểm tra kiến trúc bằng lệnh `uname -m` trước.

Tên miền và bản ghi DNS

Để xin chứng chỉ, tên miền phải trỏ về IP công khai của máy chủ. Anh em vào trang quản lý DNS, tạo bản ghi A cho từng tên miền con, ví dụ `n8n.tenmien.vn` và `anh.tenmien.vn`, trỏ cùng về một IP. Với nhiều dịch vụ, có thể tạo một bản ghi wildcard `*.tenmien.vn` cho gọn.

Nếu máy chủ đặt ở nhà và IP nhà mạng thay đổi, anh em cần dịch vụ DNS động như DuckDNS. Tài liệu chính thức cũng gợi ý dùng DuckDNS, Amazon Route53 hoặc Cloudflare qua các dự án cập nhật DNS động.

Mở cổng trên router và tường lửa

Máy chủ ở nhà cần mở hai cổng 80 và 443 trên router, chuyển về IP nội bộ của máy chạy Nginx Proxy Manager. Thao tác này gọi là port forwarding, mỗi dòng router đặt ở một menu khác nhau, thường nằm trong NAT hoặc Virtual Server. Không chuyển cổng 81 ra ngoài.

Với VPS, anh em kiểm tra tường lửa của nhà cung cấp và tường lửa trong hệ điều hành như UFW. Hai lớp này đều phải cho phép 80 và 443. Nhiều nhà mạng gia đình chặn cổng 80 chiều vào, lúc đó bước xác minh HTTP sẽ thất bại và anh em phải chuyển sang DNS challenge.

Cài Nginx Proxy Manager bằng Docker Compose

Dựng bằng Docker Compose

Dựng bằng Docker Compose

Đây là phần thao tác chính. Toàn bộ quá trình mất khoảng năm phút nếu Docker đã sẵn sàng, phần lâu nhất là lần chạy đầu tiên khi ứng dụng tự sinh khoá.

Tệp docker-compose.yml với SQLite

Anh em tạo một thư mục riêng, ví dụ `~/npm`, rồi tạo tệp `docker-compose.yml` với nội dung dưới đây. Đây là cấu hình mặc định trong tài liệu chính thức, dùng SQLite nên không cần thêm container cơ sở dữ liệu.

services:
  app:
    image: 'jc21/nginx-proxy-manager:2.16.0'
    restart: unless-stopped
    ports:
      # <cổng máy chủ>:<cổng container>
      - '80:80'    # HTTP công khai
      - '443:443'  # HTTPS công khai
      - '81:81'    # Giao diện quản trị
      # Thêm cổng cho Stream nếu cần
      # - '21:21'  # FTP
    environment:
      TZ: "Asia/Ho_Chi_Minh"
      # Bỏ dấu # nếu máy chủ không bật IPv6
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

So với bản gốc, ProxyVN chỉ đổi múi giờ sang `Asia/Ho_Chi_Minh` để nhật ký ghi đúng giờ Việt Nam. Anh em nên ghim phiên bản cụ thể như trên thay vì dùng tag `latest`, để lần khởi động lại không vô tình kéo bản mới có thay đổi lớn.

Khởi chạy và kiểm tra

Trong thư mục chứa tệp, anh em chạy lệnh khởi động rồi theo dõi nhật ký:

docker compose up -d
docker compose logs -f app

Lần chạy đầu, ứng dụng sinh khoá JWT, tạo bảng cơ sở dữ liệu và tạo tài khoản quản trị mặc định. Quá trình này có thể mất vài phút trên máy yếu. Khi nhật ký báo dịch vụ đã sẵn sàng, anh em mở trình duyệt vào `http://IP-máy-chủ:81`.

Phương án dùng MySQL hoặc MariaDB

Với hệ thống nhiều người cùng quản trị hoặc muốn tách dữ liệu, anh em có thể dùng MariaDB. Tài liệu cung cấp sẵn mẫu với các biến `DB_MYSQL_HOST`, `DB_MYSQL_PORT`, `DB_MYSQL_USER`, `DB_MYSQL_PASSWORD`, `DB_MYSQL_NAME`. Có một lưu ý quan trọng: các biến `DB_MYSQL_*` được ưu tiên hơn SQLite, nên đã khai báo chúng thì không dùng SQLite được nữa.

Ngoài ra còn mẫu cho Postgres, nhưng chỉ dùng schema mặc định `public`. Với nhu cầu cá nhân và nhóm nhỏ, ProxyVN khuyên giữ SQLite cho đơn giản. Ít thành phần thì ít chỗ hỏng.

Đăng nhập lần đầu

Tuỳ phiên bản, màn hình đầu tiên sẽ khác nhau. Các bản cũ dùng tài khoản mặc định `admin@example.com` với mật khẩu `changeme`, đăng nhập xong được yêu cầu đổi ngay. Các bản mới hơn hiện màn hình tạo tài khoản quản trị ngay lần truy cập đầu tiên.

Dù ở phiên bản nào, việc đầu tiên vẫn là đặt email thật và mật khẩu mạnh. Email này còn được dùng làm email mặc định khi xin chứng chỉ Let's Encrypt. Đừng để tài khoản mặc định tồn tại quá vài phút khi cổng 81 đang mở.

Tạo Proxy Host đầu tiên trên Nginx Proxy Manager

Proxy Host là tính năng anh em dùng nhiều nhất. Mỗi Proxy Host nối một hoặc nhiều tên miền tới một dịch vụ phía sau. Phần này đi qua từng tab trong cửa sổ tạo host.

Tab Details

Từ trang Dashboard, anh em vào Hosts > Proxy Hosts, bấm Add Proxy Host. Tab Details có các ô sau:

  • Domain Names: gõ tên miền rồi nhấn Enter, ví dụ `n8n.tenmien.vn`. Có thể nhập nhiều tên miền cho cùng một host.
  • Scheme: giao thức giữa Nginx và dịch vụ phía sau, thường là `http`. Chỉ chọn `https` khi dịch vụ phía sau tự phục vụ HTTPS.
  • Forward Hostname / IP: địa chỉ dịch vụ phía sau, có thể là IP nội bộ như `192.168.1.20` hoặc tên container.
  • Forward Port: cổng dịch vụ đang lắng nghe, ví dụ `5678`.
  • Cache Assets: lưu đệm tệp tĩnh, bật cho trang web, tắt cho ứng dụng động.
  • Block Common Exploits: chặn một số mẫu tấn công phổ biến, nên bật.
  • Websockets Support: bật cho ứng dụng dùng kết nối thời gian thực.
  • Access List: chọn danh sách kiểm soát truy cập nếu có.

Bấm Save là host có hiệu lực ngay. Anh em gõ tên miền vào trình duyệt, nếu thấy dịch vụ hiện ra qua HTTP là phần chuyển tiếp đã chạy.

Dùng tên container thay vì IP

Khi dịch vụ phía sau cũng chạy bằng Docker, cách gọn nhất là cho hai container chung một mạng Docker rồi điền tên container vào ô Forward Hostname. Làm vậy thì dịch vụ phía sau không cần mở cổng ra máy chủ, chỉ Nginx Proxy Manager nhìn thấy nó.

Lỗi hay gặp là điền `localhost` hoặc `127.0.0.1`. Bên trong container, localhost là chính container Nginx Proxy Manager, không phải máy chủ. Nếu dịch vụ chạy trực tiếp trên máy chủ, anh em điền IP LAN của máy chủ hoặc IP cổng mạng Docker. Bài cấu hình proxy cho Docker có phần giải thích mạng container khá rõ.

Tab Custom locations

Tab này cho phép chuyển một đường dẫn con sang dịch vụ khác. Ví dụ `tenmien.vn/` đi tới trang web chính, còn `tenmien.vn/api` đi tới máy chủ API ở cổng khác. Mỗi location có ô đường dẫn, scheme, hostname và port riêng, cùng biểu tượng bánh răng để thêm cấu hình Nginx cho location đó.

Tính năng này hữu ích nhưng dễ rối khi ứng dụng phía sau không hiểu tiền tố đường dẫn. Nhiều ứng dụng hiện đại sinh đường dẫn bắt đầu từ gốc, đặt vào thư mục con sẽ vỡ giao diện. Gặp trường hợp đó, anh em nên dùng tên miền con riêng thay vì thư mục con.

Tab Advanced

Tab Advanced có một ô văn bản để chèn chỉ thị Nginx tuỳ ý vào khối server của host. Đây là chỗ dành cho người dùng thành thạo, ví dụ tăng giới hạn kích thước tệp tải lên hay thời gian chờ:

client_max_body_size 200M;
proxy_read_timeout 300s;
proxy_send_timeout 300s;

Ô này nhận cú pháp Nginx thật, gõ sai một dấu chấm phẩy là Nginx không nạp được và host báo Offline. Mỗi lần sửa, anh em nên lưu từng thay đổi nhỏ để dễ biết dòng nào gây lỗi.

Cấp chứng chỉ SSL miễn phí trong Nginx Proxy Manager

Cấp chứng chỉ SSL miễn phí

Cấp chứng chỉ SSL miễn phí

Đây là lý do nhiều người chọn công cụ này thay vì viết cấu hình tay. Xin và gia hạn chứng chỉ Let's Encrypt chỉ cần vài cú bấm, việc gia hạn chạy tự động.

Xin chứng chỉ bằng HTTP challenge

Anh em mở Proxy Host vừa tạo, chuyển sang tab SSL và làm theo thứ tự:

  • Ở ô SSL Certificate, chọn Request a new SSL Certificate.
  • Bật Force SSL để tự chuyển HTTP sang HTTPS.
  • Bật HTTP/2 Support để tải trang nhanh hơn.
  • Cân nhắc bật HSTS Enabled khi đã chạy HTTPS ổn định.
  • Điền Email Address for Let's Encrypt và tích ô đồng ý điều khoản.
  • Bấm Save và chờ khoảng mười đến ba mươi giây.

Với HTTP challenge, Let's Encrypt gọi vào tên miền qua cổng 80 để xác minh. Vì vậy cổng 80 phải mở và tên miền phải trỏ đúng. Nếu một trong hai điều kiện thiếu, giao diện báo "Internal Error" và nhật ký ghi lỗi xác minh.

DNS challenge và chứng chỉ wildcard

Khi cổng 80 bị nhà mạng chặn, hoặc khi anh em muốn chứng chỉ wildcard `*.tenmien.vn`, hãy bật Use a DNS Challenge. Lúc này giao diện yêu cầu chọn nhà cung cấp DNS và nhập thông tin xác thực API, ví dụ token API của Cloudflare.

Thay vì gọi qua cổng 80, Let's Encrypt kiểm tra một bản ghi TXT do công cụ tự tạo trong DNS. Cách này không cần mở cổng nào ra ngoài, rất hợp với máy chủ nội bộ chỉ dùng trong mạng LAN mà vẫn muốn có HTTPS hợp lệ. Token API chỉ nên cấp quyền sửa DNS cho đúng một zone, không dùng khoá toàn quyền của tài khoản.

Tải lên chứng chỉ riêng

Doanh nghiệp đã mua chứng chỉ từ nhà cung cấp khác có thể vào SSL Certificates > Add SSL Certificate > Custom. Anh em tải lên tệp khoá riêng, tệp chứng chỉ và tệp chứng chỉ trung gian nếu có. Chứng chỉ tải lên không tự gia hạn, phải nhớ thay trước ngày hết hạn.

Muốn hiểu kỹ hơn về vai trò của chứng chỉ khi đi qua proxy, anh em đọc thêm bài proxy SSL là gì. Kiến thức đó giúp phân biệt lỗi chứng chỉ phía người dùng với lỗi phía máy chủ.

Giới hạn tần suất của Let's Encrypt

Let's Encrypt giới hạn số chứng chỉ cấp cho cùng một tên miền trong một khoảng thời gian. Khi thử đi thử lại nhiều lần vì sai cấu hình, anh em có thể chạm giới hạn và phải chờ. Cách an toàn là kiểm tra kỹ DNS và cổng trước khi bấm xin chứng chỉ.

Một mẹo khác là gom nhiều tên miền con vào một chứng chỉ wildcard. Vừa giảm số lần xin, vừa dễ quản lý khi thêm dịch vụ mới.

Các tính năng khác của Nginx Proxy Manager

Ngoài Proxy Host, menu Hosts còn ba loại khác và phần Access Lists. Mỗi tính năng xử lý một nhu cầu riêng, dùng đúng chỗ sẽ đỡ phải viết cấu hình tay.

Redirection Hosts và 404 Hosts

Redirection Host chuyển hướng một tên miền sang địa chỉ khác, ví dụ chuyển tên miền cũ sang tên miền mới với mã 301. Anh em chọn mã chuyển hướng, có giữ đường dẫn hay không, và vẫn có thể cấp SSL cho tên miền nguồn.

404 Host trả về trang không tìm thấy cho một tên miền. Tính năng này hữu ích khi anh em ngừng một dịch vụ nhưng tên miền vẫn trỏ về máy chủ, tránh việc tên miền đó hiển thị nhầm trang mặc định.

Streams cho TCP và UDP

Streams chuyển tiếp lưu lượng TCP hoặc UDP thuần, không qua HTTP. Ví dụ chuyển cổng 25565 cho máy chủ game, cổng 22 cho SSH hay cổng cơ sở dữ liệu. Mỗi Stream có các ô:

  • Incoming Port: cổng nhận vào trên máy chủ.
  • Forward Host và Forward Port: đích chuyển tới.
  • TCP Forwarding và UDP Forwarding: chọn giao thức.

Điểm hay quên là phải khai báo cổng đó trong phần `ports` của tệp compose, rồi chạy lại `docker compose up -d`. Nếu không, Stream vẫn hiện Online trên giao diện nhưng bên ngoài không gọi vào được.

Access Lists

Access List giới hạn ai được vào một host. Anh em vào Access Lists > Add Access List, đặt tên rồi cấu hình hai tab:

  • Authorization: thêm cặp tên đăng nhập và mật khẩu, người truy cập sẽ thấy hộp đăng nhập của trình duyệt.
  • Access: thêm dòng `allow` cho IP hoặc dải IP được phép, dòng `deny all` cho phần còn lại.

Tuỳ chọn Satisfy Any cho phép vào khi thoả một trong hai điều kiện, ví dụ IP trong văn phòng thì vào thẳng, ở ngoài thì phải nhập mật khẩu. Còn Pass Auth to Host chuyển thông tin đăng nhập xuống ứng dụng phía sau, chỉ bật khi ứng dụng cần.

Access List là lớp khoá cửa rẻ nhất mà hiệu quả nhất. Mọi trang quản trị đưa ra Internet đều nên có ít nhất một lớp như vậy.

Quản lý người dùng và nhật ký

Menu Users cho phép tạo thêm tài khoản và phân quyền theo từng nhóm tính năng: chỉ xem, quản lý, hoặc ẩn. Mục Audit Log ghi lại ai tạo, sửa, xoá host nào và lúc nào. Với nhóm vài người cùng quản trị, nhật ký này giúp truy ra thay đổi gây lỗi rất nhanh.

Bảo mật khi vận hành Nginx Proxy Manager

Công cụ đứng ở cửa ngõ của toàn bộ dịch vụ, nên một lỗ hổng ở đây ảnh hưởng tới mọi thứ phía sau. Phần này gom các bước bảo vệ nên làm ngay sau khi cài.

Không để cổng quản trị lộ ra ngoài

Cách an toàn nhất là không ánh xạ cổng 81 ra địa chỉ công khai. Anh em có thể sửa dòng cổng thành `'127.0.0.1:81:81'` để chỉ truy cập từ chính máy chủ, rồi dùng đường hầm SSH khi cần quản trị:

ssh -L 8181:127.0.0.1:81 user@ip-vps
# Sau đó mở http://localhost:8181 trên máy của mình

Một cách khác là tạo Proxy Host cho chính giao diện quản trị, trỏ về cổng 81, cấp SSL và gắn Access List chỉ cho phép IP của anh em. Cách này tiện hơn nhưng phải cẩn thận với Access List, cấu hình sai là tự khoá mình ở ngoài.

Cập nhật phiên bản có kế hoạch

Dự án ra bản mới khá đều, có bản vá bảo mật. Anh em nên theo dõi trang phát hành trên GitHub, đọc ghi chú thay đổi rồi mới đổi tag trong tệp compose. Quy trình gọn là sao lưu, đổi tag, chạy `docker compose pull` và `docker compose up -d`, kiểm tra các host chính.

Không nên đặt công cụ tự cập nhật image mà không kiểm tra. Một bản lớn đổi cấu trúc dữ liệu có thể khiến hệ thống không khởi động được giữa đêm.

Giấu dịch vụ phía sau

Dịch vụ phía sau không cần mở cổng ra Internet nữa, chỉ cần Nginx Proxy Manager gọi được. Nếu dùng Docker, xoá phần `ports` của các container phía sau và cho chúng chung mạng nội bộ. Nếu dịch vụ chạy trên máy khác trong LAN, tường lửa của máy đó chỉ nên cho phép IP của máy chạy reverse proxy.

Làm được bước này, toàn bộ hệ thống chỉ có đúng hai cổng 80 và 443 mở ra ngoài. Bề mặt tấn công thu hẹp lại rất nhiều so với việc mở hàng chục cổng.

Sửa lỗi thường gặp với Nginx Proxy Manager

Khoanh vùng lỗi 502 Bad Gateway

Khoanh vùng lỗi 502 Bad Gateway

Phần lớn lỗi rơi vào bốn nhóm: 502, không cấp được SSL, trang mặc định hiện ra sai chỗ, và host báo Offline. Mỗi nhóm có cách khoanh vùng riêng.

Lỗi 502 Bad Gateway

502 nghĩa là Nginx nhận được yêu cầu nhưng không gọi được dịch vụ phía sau. Nguyên nhân thường gặp theo thứ tự:

  • Dịch vụ phía sau chưa chạy hoặc đã dừng.
  • Sai Forward Hostname, đặc biệt là điền localhost.
  • Sai Forward Port, ví dụ ứng dụng chạy 3001 mà điền 3000.
  • Hai container không chung mạng Docker nên không gọi được tên của nhau.
  • Chọn Scheme `https` trong khi dịch vụ phía sau chỉ phục vụ HTTP.

Để kiểm tra, anh em vào bên trong container và gọi thử dịch vụ phía sau. Nếu lệnh này lỗi, vấn đề nằm ở mạng hoặc dịch vụ, không phải ở cấu hình host:

docker exec -it npm-app-1 curl -I http://192.168.1.20:5678

Không xin được chứng chỉ SSL

Khi giao diện báo lỗi lúc xin chứng chỉ, anh em kiểm tra ba điều. Tên miền đã trỏ đúng IP chưa, dùng `nslookup tenmien.vn` để xem. Cổng 80 có thực sự mở từ bên ngoài không, thử bằng điện thoại dùng 4G. Có đang chạm giới hạn tần suất của Let's Encrypt không.

Nhật ký chi tiết nằm trong thư mục `data/logs` và `letsencrypt`. Nếu thấy chữ "Timeout during connect" là cổng 80 bị chặn. Nếu thấy "NXDOMAIN" là DNS chưa có bản ghi.

Hiện trang Congratulations mặc định

Trang chào mừng mặc định hiện ra khi Nginx nhận yêu cầu cho một tên miền chưa được khai báo trong bất kỳ host nào. Thường do gõ sai tên miền trong ô Domain Names, thiếu hoặc thừa tiền tố `www`. Anh em kiểm tra lại danh sách tên miền của host, thêm cả bản có và không có www nếu cần.

Có thể thay trang mặc định trong Settings > Default Site, chọn trả về 404, chuyển hướng, hoặc trang tuỳ chỉnh. Chọn 404 giúp máy chủ đỡ lộ thông tin với những ai quét IP ngẫu nhiên.

Host báo Offline

Trạng thái Offline thường do Nginx không nạp được cấu hình của host đó. Thủ phạm hay gặp nhất là cú pháp sai trong tab Advanced. Anh em mở host, xoá phần cấu hình nâng cao vừa thêm, lưu lại để xem trạng thái có trở về Online không.

Nếu vẫn lỗi, xem nhật ký container bằng `docker compose logs app`. Nginx ghi rõ dòng nào trong tệp nào bị lỗi, đối chiếu với tệp trong `data/nginx/proxy_host/` là ra.

Sao lưu và chuyển máy chủ Nginx Proxy Manager

Một hệ thống chạy ổn định vài tháng sẽ có hàng chục host và chứng chỉ. Mất dữ liệu lúc đó tốn cả buổi để dựng lại, nên sao lưu cần thành thói quen.

Sao lưu hai thư mục dữ liệu

Toàn bộ trạng thái nằm trong hai thư mục `data` và `letsencrypt`. Cách đơn giản là dừng container, nén hai thư mục rồi chạy lại:

cd ~/npm
docker compose stop
tar czf npm-backup-$(date +%F).tar.gz data letsencrypt
docker compose start

Dừng container trước khi nén giúp tệp SQLite không bị ghi dở. Anh em nên đẩy tệp nén sang một nơi khác máy chủ, ví dụ ổ lưu trữ đám mây, vì sao lưu nằm cùng máy thì hỏng ổ là mất cả hai.

Chuyển sang máy chủ mới

Quy trình chuyển máy chủ gồm cài Docker trên máy mới, chép tệp compose và giải nén bản sao lưu vào cùng thư mục, rồi khởi động. Sau đó đổi bản ghi DNS sang IP mới. Chứng chỉ vẫn dùng được vì gắn với tên miền, không gắn với IP.

Một lưu ý: nếu máy cũ dùng MariaDB thì phải xuất cơ sở dữ liệu bằng lệnh dump, không chép thư mục dữ liệu MariaDB thô giữa hai phiên bản khác nhau.

So sánh Nginx Proxy Manager với các lựa chọn khác

Công cụ này không phải lựa chọn duy nhất. Tuỳ thói quen và quy mô, anh em có thể hợp với cách khác hơn.

Bảng so sánh nhanh

Bảng dưới đây so sánh bốn cách dựng reverse proxy phổ biến cho máy chủ nhỏ và vừa, phần tính năng của công cụ đối chiếu theo tài liệu hướng dẫn chính thức:

Bảng: Bảng so sánh nhanh

Tiêu chí

Nginx Proxy Manager

Nginx viết tay

Caddy

Traefik

Cách cấu hình

Giao diện web

Tệp cấu hình

Tệp Caddyfile ngắn

Nhãn Docker, tệp YAML

SSL tự động

Có, bấm chọn

Phải cài Certbot

Có, mặc định

Có

Đường cong học

Thấp

Cao

Thấp

Trung bình

Quản lý bằng Git

Khó

Dễ

Dễ

Dễ

Hợp với

Homelab, nhóm nhỏ

Hệ thống lớn

Người thích tệp gọn

Nhiều container động

Nếu anh em muốn hiểu sâu và tối ưu từng chỉ thị, bài cấu hình Nginx làm reverse proxy hướng dẫn viết tay chi tiết. Còn nếu thích cấu hình bằng tệp nhưng vẫn muốn SSL tự động, bài Caddy reverse proxy là lựa chọn đáng thử.

Khi nào nên dùng công cụ này

Nginx Proxy Manager hợp nhất khi anh em cần dựng nhanh, ít host thay đổi, và có người không rành dòng lệnh cùng quản trị. Homelab, máy chủ gia đình, công ty nhỏ tự chạy vài công cụ nội bộ là nhóm dùng nhiều nhất.

Ngược lại, khi hạ tầng cần quản lý bằng mã nguồn, cần tái tạo môi trường tự động, hoặc có hàng trăm host, cấu hình dạng tệp sẽ dễ kiểm soát hơn. Bài cấu hình máy chủ proxy có phần bàn về việc chọn công cụ theo quy mô.

Kết hợp với proxy đi ra ngoài

Một số hệ thống cần cả hai chiều. Reverse proxy đón người dùng vào, còn ứng dụng phía sau như công cụ thu thập dữ liệu hay tự động hoá lại cần IP sạch để đi ra ngoài. Hai lớp này độc lập, anh em cấu hình proxy đi ra ngay trong ứng dụng hoặc qua biến môi trường của container.

Khi cần IP Việt Nam ổn định cho chiều đi ra, anh em có thể mua proxy dân cư tĩnh hoặc datacenter tại ProxyVN, hỗ trợ HTTP và SOCKS5, cấp sẵn tên đăng nhập và mật khẩu. Nhờ tách biệt hai chiều, thay đổi proxy đi ra không ảnh hưởng gì tới cấu hình reverse proxy.

Kết luận

Nginx Proxy Manager biến việc dựng reverse proxy có SSL từ một buổi đọc tài liệu thành vài phút bấm chọn. Anh em cài bằng Docker Compose, tạo Proxy Host, xin chứng chỉ Let's Encrypt, khoá cổng 81 và sao lưu thư mục dữ liệu đều đặn. Cần tư vấn thêm về proxy, hãy liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khi triển khai Nginx Proxy Manager.

TIN TỨC LIÊN QUAN