Nginx Proxy Manager: Reverse Proxy, SSL, Domain Dễ Hiểu Cho Newbie

P P T P Chung

Nginx Proxy Manager cho người mới: Reverse Proxy, SSL, Domain hoạt động thế nào?

Bạn có một VPS hoặc máy chủ mini ở nhà. Trên đó chạy nhiều dịch vụ: website, n8n, Portainer, Jellyfin, Home Assistant, API cá nhân. Vấn đề xuất hiện ngay: mỗi dịch vụ dùng một cổng khác nhau như :3000, :8080, :5678. Không lẽ người dùng phải nhớ http://server-ip:5678? Không lẽ mở hàng loạt port ra Internet?

Đây là lúc Nginx Proxy Manager hữu ích. Nó giúp bạn biến những địa chỉ khó nhớ thành domain gọn gàng như:

https://app.example.comhttps://n8n.example.comhttps://home.example.com

Đồng thời tự cấp SSL miễn phí, quản lý reverse proxy bằng giao diện web, không cần viết file cấu hình Nginx thủ công.


Nginx Proxy Manager là gì?

Nginx Proxy Manager, thường viết tắt là NPM, là công cụ quản lý Nginx qua giao diện web. Bên dưới nó vẫn dùng Nginx thật, nhưng bạn không cần sửa file .conf bằng tay.

NPM thường dùng để:

– Tạo reverse proxy cho app nội bộ. – Gắn domain/subdomain vào dịch vụ. – Cấp chứng chỉ SSL Let’s Encrypt. – Chuyển HTTP sang HTTPS. – Thêm basic auth, access list, custom header. – Quản lý nhiều website/service trên cùng một IP.

Ví dụ bạn có app chạy nội bộ tại:

http://192.168.1.10:3000

Bạn muốn truy cập bằng:

https://app.example.com

NPM sẽ đứng giữa, nhận request từ Internet, rồi chuyển tiếp vào app thật.


Reverse Proxy là gì?

Reverse proxy là máy chủ trung gian đứng trước ứng dụng.

Luồng đơn giản:

Người dùng → Domain → Nginx Proxy Manager → App nội bộ

Ví dụ:

https://n8n.example.com → NPM → http://n8n:5678

Người dùng không biết app thật nằm ở đâu, chạy port nào, dùng Docker container nào. Họ chỉ thấy domain đẹp, HTTPS chuẩn.

Reverse proxy khác gì port forwarding trực tiếp?

Nếu không dùng reverse proxy, bạn thường phải mở port từng app:

app1: 3000
app2: 8080
app3: 5678

URL sẽ xấu:

http://example.com:3000
http://example.com:8080
http://example.com:5678

Với reverse proxy:

https://app1.example.com
https://app2.example.com
https://n8n.example.com

Ưu điểm:

Chỉ cần mở port 80/443. – URL sạch, dễ nhớ. – Dễ bật HTTPS. – Ẩn port backend. – Quản lý tập trung. – Phù hợp Docker, homelab, VPS.


Domain hoạt động thế nào?

Domain là tên dễ nhớ trỏ về máy chủ.

Ví dụ:

example.com → 123.45.67.89

Khi người dùng nhập:

https://app.example.com

Trình duyệt sẽ hỏi DNS:

app.example.com nằm ở IP nào?

DNS trả về IP máy chủ. Sau đó request đi tới IP đó.

A record và CNAME

Hai loại record hay gặp:

A record:
app.example.com → 123.45.67.89

Dùng khi bạn muốn trỏ thẳng domain/subdomain về IP.

CNAME record:
app.example.com → server.example.com

Dùng khi muốn alias domain này sang domain khác.

Với người mới, thường chỉ cần A record:

n8n.example.com     A     123.45.67.89
home.example.com    A     123.45.67.89
app.example.com     A     123.45.67.89

Tất cả subdomain cùng trỏ về một IP. NPM sẽ phân biệt request dựa trên hostname.

Vì sao nhiều domain cùng trỏ một IP vẫn chạy đúng app?

Vì request HTTP/HTTPS có thông tin host.

Ví dụ trình duyệt gửi:

Host: n8n.example.com

NPM nhìn Host, thấy rule tương ứng, rồi chuyển request đến backend phù hợp:

n8n.example.com → http://n8n:5678
app.example.com → http://app:3000
home.example.com → http://homeassistant:8123

Một IP, nhiều app. Đây là điểm mạnh của reverse proxy.


SSL là gì? Vì sao cần HTTPS?

SSL/TLS là lớp mã hóa giữa trình duyệt và server. Khi dùng HTTPS, dữ liệu không bị đọc lén dễ dàng trên đường truyền.

Không SSL:

http://app.example.com

Có SSL:

https://app.example.com

HTTPS giúp:

– Mã hóa dữ liệu. – Tránh cảnh báo “Not Secure”. – Bảo vệ cookie/token. – Cần thiết cho nhiều API, webhook, OAuth. – Tăng độ tin cậy website.

Nginx Proxy Manager tích hợp Let’s Encrypt, dịch vụ cấp chứng chỉ SSL miễn phí. Bạn chỉ cần domain trỏ đúng IP, mở port đúng, rồi bấm cấp cert.


Port 80 và 443 đóng vai trò gì?

Hai port quan trọng:

80: HTTP. – 443: HTTPS.

Để NPM hoạt động public, router/firewall/VPS cần mở:

80/tcp
443/tcp

Nếu chạy NPM bằng Docker, container cũng cần map port:

ports:
  - "80:80"
  - "443:443"
  - "81:81"

Trong đó:

80: nhận HTTP. – 443: nhận HTTPS. – 81: giao diện quản trị NPM.

Lưu ý: port 81 không nên public nếu không cần. Tốt hơn: chỉ mở nội bộ, VPN, hoặc firewall giới hạn IP.


NPM xử lý request như thế nào?

Ví dụ bạn truy cập:

https://blog.example.com

Quy trình:

1. Trình duyệt hỏi DNS. 2. DNS trả IP server. 3. Trình duyệt kết nối tới port 443. 4. NPM nhận request. 5. NPM kiểm tra SSL cert cho blog.example.com. 6. NPM đọc hostname. 7. NPM tìm proxy host tương ứng. 8. NPM chuyển request tới backend. 9. Backend trả response. 10. NPM trả response về trình duyệt.

Sơ đồ:

Browser
  ↓ HTTPS
Nginx Proxy Manager
  ↓ HTTP nội bộ
App / Container / Service

Backend có thể không cần HTTPS nếu chỉ chạy trong mạng nội bộ an toàn. HTTPS nằm ở lớp public giữa user và NPM.


Cách tạo một Proxy Host trong Nginx Proxy Manager

Trong giao diện NPM, vào Hosts → Proxy Hosts → Add Proxy Host.

Tab Details

Ví dụ app chạy tại:

http://192.168.1.10:3000

Điền:

Domain Names: app.example.com
Scheme: http
Forward Hostname / IP: 192.168.1.10
Forward Port: 3000

Bật thêm:

Block Common Exploits. – Websockets Support nếu app cần realtime/websocket.

Tab SSL

Chọn:

Request a new SSL Certificate

Bật:

Force SSLHTTP/2 SupportHSTS chỉ khi chắc mọi thứ đã chạy HTTPS ổn.

Nhập email, đồng ý Let’s Encrypt Terms, lưu lại.

Nếu DNS đúng và port 80/443 mở, cert sẽ được cấp.


Lỗi thường gặp

Domain chưa trỏ đúng IP

Kiểm tra:

nslookup app.example.com

Hoặc:

dig app.example.com

Nếu IP sai, sửa DNS. Chờ DNS propagate.

Port 80/443 bị chặn

Let’s Encrypt cần xác minh domain. Nếu port 80 không vào được server, cấp SSL có thể fail.

Kiểm tra firewall VPS, router, security group cloud.

Backend sai host hoặc sai port

Nếu app chạy ở Docker network, dùng tên container:

Forward Hostname: n8n
Forward Port: 5678

Nếu app chạy ngoài Docker, dùng IP LAN hoặc IP host.

App cần websocket

Một số app như Home Assistant, code-server, nhiều dashboard realtime cần websocket. Bật:

Websockets Support

Mixed content

Website HTTPS nhưng tải tài nguyên HTTP:

http://...

Trình duyệt sẽ chặn. Sửa app config để dùng HTTPS URL public.


Nginx Proxy Manager có an toàn không?

NPM tiện, nhưng không phải lá chắn thần kỳ.

Nên làm:

– Đặt mật khẩu admin mạnh. – Không public port 81 nếu không cần. – Bật 2FA nếu có lớp auth ngoài. – Dùng VPN/Tailscale/WireGuard cho admin. – Chỉ expose dịch vụ thật sự cần public. – Update image định kỳ. – Không dùng default password. – Thêm access list cho app nhạy cảm.

Với app nội bộ như database, admin panel, monitoring riêng tư: tốt nhất không public. Dùng VPN thay vì reverse proxy công khai.


Khi nào nên dùng NPM?

Dùng NPM khi bạn:

– Tự host nhiều dịch vụ. – Muốn domain đẹp cho từng app. – Cần HTTPS miễn phí. – Không muốn viết Nginx config thủ công. – Dùng Docker/homelab/VPS cá nhân. – Muốn quản lý proxy qua UI.

Không nhất thiết dùng NPM nếu:

– Chỉ có một website đơn giản. – Đã dùng Cloudflare Tunnel. – Đã có Traefik/Caddy hoạt động tốt. – Cần cấu hình Nginx rất tùy biến, phức tạp.


Kết luận thực tế

Nginx Proxy Manager giúp người mới tiếp cận reverse proxy dễ hơn rất nhiều. Bạn chỉ cần hiểu ba mảnh chính:

Domain trỏ người dùng về đúng IP. – Reverse proxy nhận request rồi chuyển tới app nội bộ. – SSL mã hóa kết nối, biến HTTP thành HTTPS an toàn.

Mô hình chuẩn:

app.example.com → IP server → NPM → app:port

Nếu bạn đang tự host vài dịch vụ, NPM là lựa chọn rất thực dụng: dễ cài, dễ quản lý, đủ mạnh cho phần lớn nhu cầu cá nhân và small team. Bắt đầu đơn giản: một domain, một proxy host, một chứng chỉ SSL. Khi đã hiểu luồng request, bạn có thể mở rộng sang nhiều app mà không cần mở thêm port lộn xộn.

Tác giả

P T P

Chia sẻ

Bài viết liên quan

Bình luận (0)

Email của bạn sẽ không được hiển thị công khai.

Chưa có bình luận. Hãy là người đầu tiên!