Cài trang WordPress thứ 2 trên Caddy Web Server

Chúng ta đã học cách cài trang WordPress lần đầu trên Caddy Web Server, việc cài trang thứ hai sẽ đơn giản hơn vì chúng ta đã cấu trúc trang đầu chuẩn, và sẽ không cần phải cài lại những phần đã cài (php, mariadb, caddy web server).


A. Tạo bảng database mới

MariaDB thì quản lý chung, nhưng mỗi trang web có database riêng.

1. Vào MariaDB

sudo mariadb

2. Tạo database

Bắt buộc tên bảng cơ sở dữ liệu, người dùng, mật khẩu phải khác với thông tin ở website đầu. Tên bảng cơ sở dữ liệu phải khác vì lý do kỹ thuật (không thể trùng nhau), user & pass phải khác vì lý do bảo mật.

CREATE DATABASE wordpress_hi_caddy DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser_hi_caddy'@'localhost' IDENTIFIED BY 'pass_db_hi_caddy';
GRANT ALL PRIVILEGES ON wordpress_hi_caddy.* TO 'wpuser_hi_caddy'@'localhost';
FLUSH PRIVILEGES;
EXIT;

B. Tải và cài đặt WordPress

1. Tạo biến

Thay example.com bằng tên miền thứ hai của bạn.

DOMAIN="example.com"

2. Tạo thư mục chứa mã nguồn của website thứ hai

sudo mkdir -p /var/www/$DOMAIN/public_html

3. Tạo thư mục chứa log lỗi và phân quyền

sudo mkdir -p /var/www/$DOMAIN/logs && sudo chown -R caddy:caddy /var/www/$DOMAIN/logs

4. Di chuyển vào thư mục web

cd /var/www/$DOMAIN

5. Tải file cài WordPress về và giải nén, xóa file nén sau khi giải nén

sudo curl -LO https://wordpress.org/latest.tar.gz && sudo tar xzvf latest.tar.gz -C /var/www/$DOMAIN/public_html --strip-components=1 && sudo rm latest.tar.gz

6. Phân quyền

WP_ROOT="/var/www/$DOMAIN/public_html"
PARENT_DIR="/var/www/$DOMAIN"
WP_OWNER="www-data"
WP_GROUP="www-data"

sudo chown -R $WP_OWNER:$WP_GROUP $WP_ROOT && sudo chown $WP_OWNER:$WP_GROUP $PARENT_DIR && sudo find $WP_ROOT -type d -exec chmod 755 {} \; && sudo find $WP_ROOT -type f -exec chmod 644 {} \; && sudo chmod +x /var/www

C. Cấu hình Caddy

1. Sửa file Caddyfile

sudo nano /etc/caddy/Caddyfile

2. Nhập thêm nội dung vào cuối file

Nếu như lần đầu chúng ta xóa hết nội dung cũ, thì lần thứ hai chúng ta chỉ bổ sung thêm nội dung cho file Caddyfile. Nhớ thay example.com bằng tên miền thứ hai của bạn (có 5 vị trí cần thay thế).

# 1. Chuyen huong www ve non-www 
www.example.com {
    redir https://example.com{uri} permanent
}

# 2. Cau hinh chinh
example.com {
    root * /var/www/example.com/public_html
    encode zstd gzip

    # --- Cai tien 1: Log: De sua loi khi can ---
    log {
        output file /var/www/example.com/logs/access.log {
            roll_size 10mb
            roll_keep 10
        }
    }

    # PHP FastCGI
    php_fastcgi unix//run/php/php8.3-fpm.sock

    # File Server
    file_server

    # Tang gioi han upload 
    request_body {
        max_size 50MB
    }

    # --- Cai tien 2: SECURITY HEADERS (bao mat trinh duyet) ---
    header {
        # chong lai clickjacking (nguoi khac nhung web cua ban vao iframe)
        X-Frame-Options "SAMEORIGIN"
        # chong lai MIME sniffing
        X-Content-Type-Options "nosniff"
        # bao ma XSS co ban
        X-XSS-Protection "1; mode=block"
        # Ep trinh duyet chi dung HTTPS (HSTS), cai nay la tuy chon
        # Mac dinh tat, muon bat thi bo dau # phia truoc Strict-Transport-Security...
        # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    }

# --- Cai tien 3: Cache nang cao ---

    # Nhom 1: CSS va JS (Cache 1 tuan - 604800s)
    # Danh cho truong hop hay sua giao dien, code
    @code_assets {
        file
        path *.css *.js
    }
    header @code_assets Cache-Control "public, max-age=604800"

    # Nhom 2: Image, Font, Icon (Cache 1 nam - 31536000s)
    # Nhung file nay rat it khi thay doi noi dung, nen de lau toi da
    @media_assets {
        file
        path *.ico *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.webp
    }
    header @media_assets Cache-Control "public, max-age=31536000"

    # --- Cai tien 4: chan file mo rong (bao mat file nhay cam) ---
    @forbidden {
        # chan thuc thi PHP o noi khong can thiet
        path /wp-content/uploads/*.php
        path /wp-includes/*.php
        # chan file cau hinh & file ma nguon he thong
        path /wp-config.php
        path /.htaccess
        path /.git
        path /.env
        path *.sql
        path *.bak
    }
    respond @forbidden 404
}

Nhấn tổ hợp phím Ctrl + O rồi Enter để lưu, nhấn tổ hợp phím Ctrl + X để thoát.

3. Khởi động lại Caddy

Nhớ khởi động lại, nếu không thì các cài đặt không được áp dụng, và bạn cũng không cài được WordPress

sudo systemctl reload caddy

4. Cài WordPress

Truy cập tên miền của bạn rồi cài như hướng dẫn ở bài đầu, chỉ khác là lần này sẽ là các tên database, user và pass mới.

Thành công:

Cài thành công trang Caddy thứ hai

5. Bảo vệ wp-config.php

Nhớ thay example.com bằng tên miền thứ hai của bạn.

WP_CONFIG="/var/www/example.com/public_html/wp-config.php"
if [ -f "$WP_CONFIG" ]; then
    sudo chmod 640 $WP_CONFIG
fi

Viết một bình luận