Cài đặt nhiều trang web trên cùng một máy chủ Amazon Linux có thể tối ưu hóa chi phí nếu bạn chạy các trang web nhỏ hoặc trung bình và không yêu cầu tài nguyên cao.
Việc cung cấp nhiều trang web trên cùng một máy chủ có thể giúp bạn tiết kiệm tiền so với việc sử dụng nhiều máy chủ riêng lẻ cho từng trang web. Điều này đặc biệt hữu ích nếu lượng lưu lượng truy cập vào mỗi trang web không lớn và các trang web không yêu cầu quá nhiều tài nguyên.
Ngoài ra giúp chúng ta không mất quá nhiều thời gian cài đặt server riêng biệt trong trường hợp các server chỉ sử dụng để test … Tuy nhiên việc cài đặt nhiều web khác nhau trên cùng 1 website không tốt cho SEO cũng như ảnh hưởng đến hiệu suất và bảo mật.
Bước 1: Tạo thư mục chứa source và file config Nginx
-
Tạo 2 thư mục chứa source như sau:
sudo mkdir -p /var/www/website1
sudo mkdir -p /var/www/website2
[ec2-user@ip-xxx/]$ cd /var/www
[ec2-user@ip-xx www]$ ls -la
total 16
drwxrwsr-x. 5 ec2-user nginx 50 Jul 31 08:19 .
drwxr-xr-x. 20 root root 277 Jul 28 08:36 ..
drwxrwsr-x. 2 ec2-user nginx 6 Mar 16 15:20 cgi-bin
drwxrwsr-x. 2 ec2-user nginx 25 Jul 28 09:57 html
drwxrwsr-x. 9 ec2-user nginx 16384 Jul 31 10:13 website1
drwxrwsr-x. 9 ec2-user nginx 16384 Jul 31 10:13 website2
2. Set quyền và owner cho 2 thư mục
Để setting owner cho cho người dùng nginx chạy lệnh
sudo chown -R nginx:nginx /var/www/website1
sudo chown -R nginx:nginx /var/www/website2
Set quyền
sudo chmod 755 /var/www
find /var/www -type d -exec sudo chmod 755 {} \;
find /var/www -type f -exec sudo chmod 644 {} \;
Dòng đầu tiên (chmod 755 /var/www
) đặt quyền cho thư mục gốc /var/www
để cho phép người dùng đọc, ghi và thực thi, và cho phép nhóm và người dùng khác thực thi (truy cập vào thư mục).
Dòng thứ 2 tìm tất cả các thư mục con trong /var/www và set quyền 755
Dòng thứ 3 tìm tất các các tệp bên trong /var/ww và set quyền 644
Hoặc theo Amazon Linux 2023 thì ta thực hiện các bước sau:
sudo usermod -a -G nginx ec2-user
- Thay đổi chủ sở hữu cho group chứa source
sudo chown -R ec2-user:nginx /var/www
- Set quyền cho các thư mục bên trong nó
sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
Chi tiết hơn bạn có thể tham khảo bài viết:
Hướng dẫn cài đặt LEMP stack trên Amazon Linux 2023 chi tiết
3. Tạo thư mục chứa file config của nginx
Lưu ý với Amazon Linux thì khi bạn cài đặt LEMP stack thì Nginx không có thư mục site-enabled trong mục /etc/nginx/ như một số phiên bản Nginx khác.
Đầu tiên ta thực hiện tạo 2 thư mục sites-available và sites-enabled.
cd /etc/nginx
sudo mkdir sites-available
sudo mkdir sites-enabled

Thư mục sites-available chúng ta sẽ đặt file .conf của từng website.
Thư mục sites-enabled sẽ thực hiện việc link sang available
Thư mục sites-available
và sites-enabled
là một cách truyền thống để quản lý các tệp cấu hình của các trang web trên Nginx. Mô hình này được sử dụng để tách biệt việc cấu hình các trang web và việc kích hoạt chúng. Điều này giúp cho việc quản lý và thay đổi cấu hình dễ dàng hơn.
- sites-available: Đây là nơi bạn đặt tất cả các tệp cấu hình của các trang web mà bạn muốn tạo trên Nginx. Tuy nhiên, khi bạn chỉ định cấu hình trong thư mục này, Nginx không tự động áp dụng nó. Các trang web trong thư mục này được coi như “có sẵn”, nhưng chưa được kích hoạt để chạy.
- sites-enabled: Đây là thư mục chứa các liên kết tới các tệp cấu hình trong thư mục
sites-available
. Mỗi liên kết đều trỏ tới một tệp cấu hình trongsites-available
. Nginx chỉ áp dụng các cấu hình trong thư mụcsites-enabled
, do đó, bất kỳ tệp cấu hình nào không có liên kết tới trong thư mục này sẽ không được Nginx sử dụng.
Khi bạn muốn kích hoạt một trang web, bạn chỉ cần tạo một liên kết từ thư mục sites-enabled
tới tệp cấu hình tương ứng trong sites-available
. Vì việc tạo liên kết là một thao tác dễ dàng, bạn có thể dễ dàng thêm hoặc xóa các trang web từ Nginx mà không cần phải thay đổi trực tiếp trong cấu hình của Nginx.
Tổ chức cấu hình vào các thư mục riêng biệt giúp tránh việc xử lý tệp cấu hình lẫn lộn và làm cho việc quản lý nhiều trang web trên một máy chủ trở nên dễ dàng và rõ ràng hơn. Tuy nhiên, việc sử dụng sites-available
và sites-enabled
không bắt buộc, và bạn có thể tổ chức cấu hình của mình theo cách khác nếu muốn.
4. Tạo file config nginx
sudo nano /etc/nginx/sites-available/website1.com..conf
sudo nano /etc/nginx/sites-available/website2.com.conf
Thêm định nghĩa cấu hình vào 2 file conf, ví dụ như bên dưới.
server {
listen 80;
server_name website1.com www.website1.com;
root /var/www/website1;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Nhấn Ctrl S để lưu, Ctrl X để thoát khỏi nano.
File conf thực tế bạn có thể tham khảo bài viết
Hướng dẫn cài đặt LEMP stack trên Amazon Linux 2023 chi tiết
Bước 2: Link file config vào thư mục site-enabled
Sau khi đã cấu hình file .conf vào mục site-avaiable ta tiến hành việc link các website đang hoạt động vào thư mục site-enabled. Lưu ý trường hợp với các website không cần hoạt động ta chỉ cần chạy lệnh unlink mà không cần phải sửa hoặc xóa file .conf đã thiết lập. Để link file website1.com.conf ta thực hiện câu lệnh:
sudo ln -s /etc/nginx/sites-available/website1.com.conf /etc/nginx/sites-enabled/
Ngược lại trong trường hợp muốn Nginx không load cấu hình của website này chúng ta chạy lệnh unlink
sudo unlink /etc/nginx/sites-available/website1.com.conf
Bước 3: Thêm thư mục sites-enabled vào danh sách thư mục load file .conf của nginx
Trong các bản Nginx khác thì file cài đặt đã tạo sẵn file sites-enabled, tuy nhiên với Amazon Linux 2023 mình không tìm thấy thư mục này. Do vậy, tiến hành thêm thư mục này vào file conf của nginx.
sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào blog http của file
include /etc/nginx/sites-enabled/*;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
Bước 4: Kiểm tra và khởi động lại nginx
sudo nginx -t
Nếu không có lỗi gì thì ta thực hiện việc khởi động lại nginx để áp dụng các cài đặt.
sudo systemctl restart nginx
sudo systemctl restart nginx
Bây giờ bạn đã cấu hình thành công nhiều trang web trên một máy chủ sử dụng Nginx. Hãy chắc chắn rằng bạn đã định tuyến tên miền của mỗi trang web tới địa chỉ IP của máy chủ để có thể truy cập chúng từ trình duyệt.
Chúc bạn thành công!