Overview
Author: nằm trong mạng nội bộ (protected zone hoặc VPN), JCR riêng.
Publish: có thể nằm trong DMZ hoặc public cloud, JCR riêng.
Dispatcher: Apache HTTP server phía ngoài cùng (cache + bảo vệ).

Thành phần | Có JCR riêng không? | Có dùng chung với thành phần khác không? |
---|---|---|
Author | Có | Không — hoàn toàn riêng biệt |
Publish | Có | Không — hoàn toàn riêng biệt |
Dispatcher | Không | — |
Vậy dữ liệu ở Publish đến từ đâu?
Từ Author “đẩy qua” bằng quá trình gọi là Replication (hoặc “Publishing”).
- Content Author trên Author tạo ra một page, một asset, hay một content fragment
- Khi họ bấm nút “Publish”, AEM Author:
- Serialize node JCR thành một gói nội dung nhẹ
- Gửi qua HTTP request đến AEM Publish
- AEM Publish ghi vào JCR riêng của nó
Mỗi instance Author và Publish đều có ổ đĩa riêng, repository riêng.

Trong môi trường Production thực tế, Dispatcher luôn chạy trên một server riêng biệt — và thường nằm trước AEM Publish như một reverse proxy + cache + firewall.
Chi tiết về Dispatcher Server:
Thành phần | Chi tiết |
---|---|
Software | Apache HTTP Server (httpd ) + Dispatcher module |
File config chính | dispatcher.any |
Mục tiêu | – Cache content (HTML, JSON, CF…) – Bảo vệ Publish – Ghi log access |
Vị trí triển khai | Trên server riêng biệt với AEM (thường là edge node hoặc DMZ) |
Cổng mặc định | 80 (HTTP), 443 (HTTPS) |
Không cài AEM | Tuyệt đối không chạy AEM ở đây |
Đặt servlet tại path không bị Dispatcher chặn
Không dùng /bin/
, /system/
, hoặc /libs/
Deploy servlet lên Publish
Nếu bạn đang local:
mvn clean install -PautoInstallPackage -Daem.port=4503
Nếu dùng AEMaaCS:
Đảm bảo servlet nằm trong core
và gói all
được build đúng
Deploy qua Cloud Manager pipeline
Cho phép URL truy cập qua Dispatcher
Nếu bạn có Dispatcher (Apache HTTP server) ở ngoài:
Mở rule trong dispatcher.any
:
apacheCopyEdit/filter {
/0001 { /type "allow" /url "/cf/list.html" }
}
Bật method GET:
apacheCopyEdit/allowedClients {
/methods [ "GET" ]
}
Tắt cache nếu nội dung thay đổi thường xuyên:
apacheCopyEdit/cache {
/rules {
/0001 { /glob "/cf/list.html" /type "deny" }
}
}
Sau đó:
bashCopyEditsudo service apache2 restart
Kết quả:
Khi mọi thứ xong xuôi, người dùng bên ngoài có thể truy cập:
arduinoCopyEdithttps://www.yourdomain.com/cf/list.html
→ Trả về HTML danh sách các CF từ DAM.
Mô hình mạng AEM với DMZ:

Mô hình mạng AEM với DMZ:
DMZ là gì?
DMZ là viết tắt của Demilitarized Zone – tạm dịch là vùng phi quân sự, trong hạ tầng IT gọi là:
Một vùng mạng “trung lập” nằm giữa Internet công cộng và mạng nội bộ (internal network).
Mục đích của DMZ
- Cho phép người ngoài truy cập các dịch vụ cần thiết (web, API, mail…) mà không thể chạm đến mạng nội bộ.
- Nếu server trong DMZ bị tấn công → kẻ tấn công không thể truy cập vào hệ thống nội bộ của công ty.
Lợi ích:
DMZ Giúp Bạn… | Vì sao? |
---|---|
Bảo vệ dữ liệu nội bộ | Author không lộ diện trước Internet |
Cho phép public website | Dispatcher & Publish có thể truy cập công khai |
Giới hạn thiệt hại khi bị hack | Hacker không thể “nhảy” từ web → database nội bộ |
Tóm gọn:
- DMZ là vùng đệm mạng.
- Chứa các server cần public như: Dispatcher, AEM Publish, Web APIs.
- Có 2 lớp firewall: ngăn từ Internet → LAN, và DMZ → LAN.
Project architecture

aem-project-root
├── core <– chứa OSGi bundles
│ └──── src/main/java/com/example/core
│ ├──── config <– đặt interface cấu hình tại đây
│ ├──── services <– interface như ExternalService.java
│ └──── services/impl <– lớp thực thi như ExternalServiceImpl.java
├── ui.apps <– cấu hình apps & components
├── ui.content <– content structure (site, pages)
├── ui.config <– OSGi configs theo runmode
└── all <– mô-đun tổng hợp để build đầy đủ dự án
AEM Deployment