# Website và PHP

> Tạo website, thêm tên miền phụ, chọn phiên bản PHP và thư mục gốc, bật chế độ Apache để dùng .htaccess và bật page cache của nginx.

Source: https://zopanel.net/vi/docs/hosting  
Updated: 2026-10-07

Mỗi website trong ZoPanel thuộc về một tài khoản hosting và nằm tại `/home/<tài-khoản>/domains/<tên-miền>/`. nginx phục vụ website, còn PHP chạy trong pool PHP-FPM riêng, tách biệt của từng tài khoản, nên code của khách này không bao giờ dùng chung tiến trình PHP với khách khác.

## Tạo website

1. Vào **Website** và bấm **Thêm website**.
2. Nhập **Tên miền**, không gồm `http://` (ví dụ `example.com`). Giữ ô **Đồng thời chạy www.example.com** để thêm `www` làm tên miền phụ.
3. Chọn **Loại website**:

| Loại | Kết quả |
| --- | --- |
| Git deploy | Kéo mã nguồn từ repository, tự nhận diện framework và deploy (xem [Git deploy](/vi/docs/git-deploy)). |
| PHP | Ứng dụng PHP trong `public_html`. |
| WordPress | Website PHP, tự động cài WordPress (xem [WordPress Toolkit](/vi/docs/wordpress)). |
| Laravel | Website PHP với thư mục gốc `public_html/public`. |
| HTML | Chỉ file tĩnh, không có PHP. |
| Node / Proxy | nginx chuyển request tới ứng dụng lắng nghe tại `127.0.0.1` (xem [Ứng dụng Node.js và Python](/vi/docs/apps-node-python)). |

4. Với các loại dùng PHP, chọn **Phiên bản PHP**. Danh sách chỉ gồm các phiên bản đã cài trên máy chủ; ZoPanel hỗ trợ PHP 7.4, 8.0, 8.1, 8.2, 8.3 và 8.4, quản trị viên cài thêm ở mục **Runtime**.
5. Giữ **SSL miễn phí (Let's Encrypt)** ở trạng thái bật. Chứng chỉ được cấp ngay khi tên miền trỏ về máy chủ (xem [Chứng chỉ SSL](/vi/docs/ssl)).
6. Bấm **Tạo website**.

Hãy trỏ bản ghi A (và AAAA nếu dùng IPv6) của tên miền về IP máy chủ trước khi chờ SSL hoạt động. Quản trị viên và đại lý chọn được **Chủ sở hữu** ngay trong hộp thoại này. Số website tối đa của mỗi tài khoản do gói hosting quy định.

## Tên miền và tên miền phụ

Mở website (**Website → Quản lý**) rồi vào tab **Tên miền** để thêm các tên miền khác cùng chạy bộ file này, ví dụ `www.example.com` hay một tên miền thương hiệu thứ hai.

- Tối đa 20 tên miền phụ cho mỗi website.
- Mỗi tên miền chỉ dùng được một lần trên máy chủ. Tên miền liên quan tới tên miền của tài khoản khác (ví dụ subdomain của tên miền người khác) sẽ bị từ chối.
- Sau khi lưu, chứng chỉ Let's Encrypt được cấp lại tự động cho danh sách tên miền mới.
- Không xoá được tên miền phụ còn email domain có hộp thư: hãy xoá email domain đó trước ở trang **Email**.

## Phiên bản PHP và thư mục gốc

Tab **PHP & cấu hình** chứa các thiết lập chạy website:

| Trường | Ý nghĩa |
| --- | --- |
| Phiên bản PHP | Bất kỳ phiên bản nào đã cài, hoặc **Không dùng PHP (tĩnh / proxy)**. Đổi lúc nào cũng được, pool PHP-FPM của tài khoản tự cập nhật theo. |
| Quy tắc rewrite | **Mặc định**, **WordPress** hoặc **Laravel**. Quy tắc WordPress còn chặn `xmlrpc.php`, file PHP trong `wp-content/uploads` và truy cập trực tiếp `wp-config.php`, `readme.html`, `license.txt`. |
| Thư mục gốc | Tính từ thư mục tên miền và luôn nằm trong `public_html`, ví dụ `public_html` hoặc `public_html/public`. |
| Cổng ứng dụng | Cổng reverse proxy. Đặt `0` để tắt chế độ proxy. |

Với website không dùng PHP, nginx trả lỗi 403 cho file `.php`, `.phtml`, `.phar`, `.inc` thay vì để lộ mã nguồn. Trên mọi website, nginx chặn file ẩn (trừ `.well-known`) và các file backup, dump phổ biến như `.sql`, `.env`, `.bak`, `.log`.

Giới hạn bộ nhớ và thời gian thực thi tối đa lấy theo gói hosting của tài khoản. Các tuỳ chọn khác như `upload_max_filesize` hay `date.timezone` được đặt riêng cho từng website ở **Công cụ → Thiết lập PHP cho website** (xem [Công cụ website](/vi/docs/website-tools)). Mỗi request tải lên tối đa 256 MB trên mọi website.

## Chế độ Apache cho .htaccess

Mặc định ZoPanel phục vụ website bằng nginx nên file `.htaccess` không có tác dụng. Website chuyển từ cPanel, DirectAdmin hoặc ứng dụng có sẵn rule `.htaccess` có thể chuyển sang chế độ Apache:

1. Mở tab **Công cụ** của website.
2. Bật **Hỗ trợ .htaccess (chế độ Apache)**. Lần đầu bật, Apache sẽ được cài lên máy chủ (khoảng 30 giây).

nginx vẫn lo SSL, tường lửa, chuyển hướng và các file tĩnh phổ biến; Apache chạy tại `127.0.0.1` áp dụng `.htaccess` rồi chuyển PHP cho pool PHP-FPM riêng của tài khoản.

Nội dung `.htaccess` trong chế độ Apache:

- **Được hỗ trợ:** rewrite, chuyển hướng, chặn truy cập (`Require`, `Deny`/`Allow`), bảo vệ mật khẩu, `ErrorDocument`, header, expires, kiểu file và `SetEnv`.
- **Bỏ qua vì lý do bảo mật:** các dòng `Options`, `SetHandler`/`AddHandler`… Chúng được ghi vào log Apache của website thay vì làm hỏng website.
- **Bỏ qua:** `php_value` và `php_flag`. Hãy cấu hình PHP ở **Thiết lập PHP cho website** (ghi vào `.user.ini`).

Page cache tắt khi dùng chế độ Apache. Chế độ Apache dành cho website PHP và website tĩnh, không áp dụng cho website proxy.

## Page cache

Website PHP có thể được phục vụ từ page cache của nginx, giúp WordPress nhanh hơn nhiều lần:

1. Mở tab **PHP & cấu hình**.
2. Bật **Page cache**.

Trang được cache trong 10 phút. ZoPanel không bao giờ cache:

- request khác GET và HEAD (ví dụ POST);
- khách có cookie đăng nhập WordPress, bài viết có mật khẩu, người bình luận, giỏ hàng hoặc session WooCommerce, hoặc cookie `laravel_session`, `PHPSESSID`, `XSRF-TOKEN`;
- URL chứa `/wp-admin`, `/wp-login.php`, `/wp-json`, `/xmlrpc.php`, `/cart`, `/checkout`, `/my-account`, `/feed` hoặc `sitemap`;
- URL có query string (tìm kiếm, bộ lọc, phân trang). Query chỉ gồm tham số theo dõi quảng cáo như `utm_*`, `fbclid`, `gclid` được coi như không có query, nên khách đến từ chiến dịch quảng cáo vẫn nhận trang đã cache.

Response có header `X-Cache` (`HIT`, `MISS`, `BYPASS`…) để bạn kiểm tra:

```bash
curl -sI https://example.com/ | grep -i x-cache
```

Muốn xoá cache, bấm **Xoá cache** ngay trong thẻ đó. Với website WordPress đã bật cache, ZoPanel còn cài một must-use plugin nhỏ (*ZoPanel page cache*) tự xoá cache của website mỗi khi bài viết, bình luận, menu, giao diện hoặc plugin thay đổi, nên chỉnh sửa hiển thị ngay. Plugin tự gỡ khi bạn tắt cache.

## Website tĩnh và website proxy

- Website **HTML** phục vụ file trong thư mục gốc, ảnh, CSS, JavaScript và font được trình duyệt cache lâu dài.
- Website **Node / Proxy** chuyển mọi request tới `127.0.0.1:<cổng>`. Với tài khoản khách hàng, ZoPanel tự cấp cổng cho từng website; chỉ quản trị viên được chọn cổng khác. Dùng tab **Deploy** để build và chạy ứng dụng (xem [Ứng dụng Node.js và Python](/vi/docs/apps-node-python)).

## Giới hạn tốc độ request

Thẻ **Giới hạn tốc độ request** trong tab **PHP & cấu hình** chặn bot và tấn công flood từ một IP. Chọn **Tắt**, **Nhẹ (20/giây)**, **Vừa (8/giây)** hoặc **Chặt (2/giây)**; file tĩnh không bị tính, request vượt mức nhận lỗi HTTP 429.

## Cấu hình nginx tuỳ chỉnh

Quản trị viên thấy thêm tab **Nâng cao** để chèn **Cấu hình nginx tuỳ chỉnh** vào khối server của website. Cấu hình được kiểm tra trước khi áp dụng (**Kiểm tra & lưu**), nên gõ sai cũng không làm nginx ngừng hoạt động.
