Khi bạn vận hành nhiều website WordPress trên cùng một server, một chiến lược phổ biến để tiết kiệm tài nguyên là cho các site dùng chung một bộ source code.
Ví dụ:
/var/www/wordpress/
→ chứa code WordPress duy nhất.example.com
, demo.com
→ mỗi domain trỏ về thư mục code chung.Tuy nhiên, vấn đề nảy sinh là thư mục wp-content/uploads/
. Nếu để mặc định, tất cả các site sẽ cùng ghi file vào chung một nơi → dẫn đến hỗn loạn, khó quản lý và có nguy cơ lộ dữ liệu.
wp-content/uploads/
.define('UPLOADS')
Trong wp-config.php
thêm:
define('UPLOADS', 'uploads/' . $_SERVER['HTTP_HOST']);
example.com
→ wp-content/uploads/example.com/
demo.com
→ wp-content/uploads/demo.com/
wp_upload_dir()
).wp-content/uploads
) có thể không tương thích.uploads
cho tất cả site./var/www/uploads/example.com
và /var/www/uploads/demo.com
.ln -s /var/www/uploads/example.com /var/www/example.com/wp-content/uploads ln -s /var/www/uploads/demo.com /var/www/demo.com/wp-content/uploads
/var/www/uploads
.chown -R www-data:www-data /var/www/uploads/example.com chmod -R 755 /var/www/uploads/example.com
Trong đó:
www-data
là user của Nginx/Apache/PHP.755
cho phép webserver đọc/ghi, người khác chỉ được đọc.autoindex off;
)..htaccess
hoặc rule Nginx để chặn truy cập trực tiếp vào file nhạy cảm (.php
, .sql
, .bak
).👉 Nếu chỉ dùng để lưu ảnh/media, và không public nguyên thư mục uploads qua URL, thì gần như không có rủi ro bảo mật lớn.
Khi có nhiều domain, việc tạo thư mục + symlink thủ công dễ nhầm lẫn. Bạn có thể dùng script:
#!/bin/bash DOMAIN=$1 UPLOAD_DIR="/var/www/uploads/$DOMAIN" SITE_DIR="/var/www/$DOMAIN/wp-content" # Tạo thư mục uploads nếu chưa có mkdir -p $UPLOAD_DIR chown -R www-data:www-data $UPLOAD_DIR # Xóa symlink cũ (nếu có) rm -rf $SITE_DIR/uploads # Tạo symlink mới ln -s $UPLOAD_DIR $SITE_DIR/uploads echo "Đã cấu hình uploads riêng cho $DOMAIN"
Chạy:
bash add_uploads.sh example.com
Cách quản lý | Ưu điểm | Nhược điểm | Khi nên dùng |
---|---|---|---|
Uploads chung | Dễ triển khai | Dữ liệu lẫn lộn, nguy hiểm | Site cá nhân nhỏ |
define('UPLOADS') | Dễ cấu hình, tách domain | Có thể lỗi plugin | Site vừa, ít plugin |
Symlink | Tách biệt, backup dễ | Cần script, quản lý phức tạp | Nhiều site độc lập |
CDN/S3 | Hiệu năng cao, scale tốt | Tốn chi phí, phức tạp | Hệ thống lớn, traffic cao |
define('UPLOADS')
.Dù chọn cách nào, hãy nhớ:
www-data
.