Cách cài đặt nhiều tên miền trên máy chủ web Nginx

Tác giả NetworkEngineer, T.M.Hai 26, 2021, 12:50:27 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách cài đặt nhiều tên miền trên máy chủ web Nginx


Ngày nay, nhiều quản trị web chạy nhiều tên miền trong cùng một máy chủ vì điều đó làm giảm chi phí và sự phức tạp trong việc xử lý nhiều trang web. Là máy chủ web, hướng dẫn này sử dụng Nginx do hiệu suất cao, tính linh hoạt và dễ cấu hình.

Hướng dẫn này hướng dẫn cách cài đặt nhiều tên miền trong cùng một máy chủ web Nginx và mã hóa lưu lượng truy cập vào cả hai tên miền miễn phí.

1. Cài đặt Nginx

Theo mặc định, Ubuntu không được cung cấp cùng với Nginx. Do đó, nó phải được cài đặt thủ công với các lệnh sau.

Mã nguồn [Chọn]
$ sudo apt-get update
Mã nguồn [Chọn]
$ sudo apt-get install nginx
Lệnh đầu tiên cập nhật thông tin kho lưu trữ cục bộ, trong khi lệnh thứ hai cài đặt Nginx trong hệ thống.

2. Cấu hình tường lửa

Cấu hình tường lửa phụ thuộc vào phần mềm tường lửa được cài đặt trong hệ thống. Vì một số tường lửa có sẵn trên thị trường, không dễ để cấu hình chúng.

Do đó, hướng dẫn này chỉ trình bày cách cấu hình tường lửa mặc định, có sẵn đó là tường lửa UFW, hay còn gọi là tường lửa không phức tạp. Các tường lửa khác phải có cấu hình tương tự như tường lửa này.

Mã nguồn [Chọn]
$ sudo ufw app list
Mã nguồn [Chọn]
$ sudo ufw allow 'Nginx HTTPS'
Mã nguồn [Chọn]
$ sudo ufw enable
Lệnh đầu tiên liệt kê các cấu hình có sẵn sẽ được sử dụng trong tường lửa.

Lệnh thứ hai sử dụng cấu hình Nginx HTTPS trong danh sách cho phép (hay còn gọi là Danh sách trắng) của tường lửa và lệnh thứ ba bật tường lửa.

Hướng dẫn này sau đó trình bày cách sử dụng HTTPS. HTTPS ngày nay là cần thiết vì nó đảm bảo kết nối dữ liệu giữa máy khách và máy chủ. Các trình duyệt như Chrome sẽ tự động mặc định thành phiên bản HTTPS của bất kỳ trang web nào trong tương lai, do đó bắt buộc phải bật SSL cho bất kỳ trang web nào, đặc biệt khi chủ sở hữu trang web có kế hoạch cải thiện điểm SEO và bảo mật của nó.

3. Cấu hình hệ thống tập tin

Mặc dù Nginx hỗ trợ phân phát nội dung thông qua nhiều tên miền, nó được định cấu hình theo mặc định để phân phát nội dung thông qua một miền duy nhất. Đường dẫn mặc định là Nginx là /var/www/html.

Nhiều tên miền yêu cầu phải có nhiều thư mục. Các hướng dẫn sau đây trình bày cách tạo nhiều thư mục để phân phát nội dung qua nhiều miền.

Tạo một thư mục cho mỗi tên miền bằng các lệnh sau. Tùy chọn -p là cần thiết để tạo các thư mục mẹ, nghĩa là khi www hoặc bất kỳ thư mục nào khác trong địa chỉ không tồn tại, nó sẽ tạo toàn bộ dòng thư mục có tùy chọn -p.

Mã nguồn [Chọn]
$ sudo mkdir -p /var/www/vietnetwork.vn/html
Mã nguồn [Chọn]
$ sudo mkdir -p /var/www/vietnetwork.net/html
Chỉ định quyền sở hữu cho các thư mục. Điều này đảm bảo người dùng có toàn quyền kiểm soát các thư mục. Tuy nhiên, ở đây người dùng được lấy từ người dùng hiện đang đăng nhập và do đó, điều quan trọng là phải đăng nhập vào tài khoản người dùng sẽ được chỉ định cho thư mục.

Phân đoạn đầu tiên của $USER dành cho người dùng và phân đoạn thứ hai dành cho nhóm mà người dùng thuộc về.

Mã nguồn [Chọn]
$ sudo chown -R $USER:$USER /var/www/vietnetwork.vn/html
Mã nguồn [Chọn]
$ sudo chown -R $USER:$USER /var/www/vietnetwork.net/html
Thay đổi quyền của các thư mục bằng các lệnh sau. Có 3 thực thể và 3 quyền trong hệ thống tập tin Linux. Trong ví dụ sau, chữ số đầu tiên dành cho người dùng, chữ số thứ hai dành cho nhóm và chữ số cuối cùng dành cho tất cả (còn gọi là công cộng).

Quyền đọc có giá trị là 4, quyền ghi có giá trị là 2 và quyền thực thi có giá trị là 1. Các số này có thể được cộng lại với nhau để thay đổi quyền của một thực thể, ví dụ: 755 có nghĩa là USER có quyền ĐỌC, VIẾT và THỰC THI (4 + 2 + 1 = 7), NHÓM có quyền ĐỌC, và THỰC THI (4 + 1 = 5), TẤT CẢ đều có quyền làm như vậy.

Quyền được áp dụng cho cả tập tin và thư mục với các quy tắc khác nhau. Các quy tắc được liệt kê trong biểu đồ sau.


Mã nguồn [Chọn]
$ sudo chmod -R 755 /var/www/vietnetwork.vn/html
Mã nguồn [Chọn]
$ sudo chmod -R 755 /var/www/vietnetwork.net/html
Sau khi quyền đã được chỉ định, hãy tạo một trang mặc định cho từng miền trong trình duyệt web khi tên miền rỗng được gọi. Tên miền khỏa thân có nghĩa là miền không có bất kỳ miền phụ nào, ví dụ: vietnetwork.vn

Mã nguồn [Chọn]
$ nano /var/www/vietnetwork.vn/html/html/index.html.
Mã nguồn [Chọn]
$ nano /var/www/vietnetwork.net/html/html/index.html.
Thêm mã soạn sẵn sau vào mỗi tập tin index và lưu dưới dạng index.html trong thư mục tương ứng như đã thấy ở trên.

Mã nguồn [Chọn]
<html>
<head>
    <title>Welcome to Site One</title>
<head>
<body>
    <h1>Success! </h1>
</body>
</html>

4. Cấu hình Nginx

Việc cấu hình Nginx không quá khó vì Nginx theo mặc định hỗ trợ nhiều tên miền. Mặc dù có thể sử dụng thông tin cấu hình của nhiều tên miền trong cùng một tập tin, nhưng bạn nên sử dụng nhiều tập tin cho thông tin cấu hình của từng tên miền.

Tập tin cấu hình mặc định được đặt tên là "default" và nằm trong /etc/nginx/sites-available/default

Điều hướng đến /etc/nginx/sites-available/default và xóa tất cả thông tin cấu hình. Sử dụng trình soạn thảo văn bản như nano hoặc notepad ++

Mã nguồn [Chọn]
$ nano /etc/nginx/sites-available/default
Sao chép và dán cấu hình sau và lưu nó.

Mã nguồn [Chọn]
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}


Sao chép thông tin cấu hình trong tập tin mặc định vào tập tin cấu hình tên miền cụ thể bằng lệnh sau.

Mã nguồn [Chọn]
$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/vietnetwork.vn
Lặp lại bước trên với miền khác cũng như với lệnh sau.

Mã nguồn [Chọn]
$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/vietnetwork.net
Mở cả hai tập tin bằng trình soạn thảo văn bản như nano và thay đổi giá trị của tùy chọn server_name như sau.

Mã nguồn [Chọn]
In /etc/nginx/sites-available/vietnetwork.vn file
server_name vietnetwork.vn
In /etc/nginx/sites-available/vietnetwork.net file
server_name vietnetwork.net

Khi cả hai tập tin đã được cấu hình, hãy sao chép chúng vào các thư mục sau để kích hoạt các tập tin cấu hình.

Nó tạo ra một liên kết tượng trưng giữa tập tin thực và thư mục, do đó trong tương lai, chỉ các tập tin trong thư mục site-available mới phải được thay đổi để thực hiện các thay đổi trong cả thư mục site-available và thư mục site-enabled.

Mã nguồn [Chọn]
$ sudo ln -s /etc/nginx/sites-available/vietnetwork.vn /etc/nginx/sites-enabled/
Mã nguồn [Chọn]
$ sudo ln -s /etc/nginx/sites-available/vietnetwork.net /etc/nginx/sites-enabled/
Xem qua các tập tin cấu hình, thực hiện thêm bất kỳ thay đổi nào và sử dụng các lệnh sau để thực hiện các thay đổi có hiệu lực.

Lệnh đầu tiên đảm bảo tập tin cấu hình không có thông tin cấu hình không hợp lệ và lệnh thứ hai đảm bảo máy chủ được tải lại hoặc khởi động lại đúng cách để thực hiện các thay đổi có hiệu lực.

Sử dụng lệnh tải lại hoặc khởi động lại. Tải lại được ưu tiên, nhưng khởi động lại có thể được sử dụng nếu tải lại không thành công.

Mã nguồn [Chọn]
$ systemctl config nginx
Mã nguồn [Chọn]
$ systemctl reload nginx
Mã nguồn [Chọn]
$ systemctl restart nginx.
5. Cấu hình bản ghi DNS

Việc cấu hình cài đặt DNS phụ thuộc vào nhà cung cấp DNS. Tuy nhiên, tất cả các nhà cung cấp DNS đều có giao diện giống nhau.

Theo mặc định, công ty đăng ký tên miền cung cấp quyền truy cập vào các bản ghi DNS. Giai đoạn này yêu cầu địa chỉ IP của máy chủ nơi máy chủ Web Nginx được lưu trữ.

Việc lấy địa chỉ IP hoàn toàn phụ thuộc vào nền tảng của bạn. Các nền tảng như Linode, DigitalOcean, Vultr hiển thị IP trong bảng điều khiển. Nếu khó tìm, hãy liên hệ với bộ phận hỗ trợ của nhà cung cấp dịch vụ tương ứng.

Trong cài đặt DNS, hãy thêm bản ghi "A" và sử dụng IP của máy chủ làm value, tên miền làm host. Đảm bảo rằng tên miền sử dụng ở đây giống với tên miền được sử dụng trong tập tin cấu hình Nginx.

Sau khi cấu hình một tên miền, hãy lặp lại nó cho cả tên miền khác.
Để các bản ghi DNS được cập nhật, quá trình này thường mất đến 24 giờ, nhưng thông thường, quá trình này được thực hiện trong vài phút.

6. Bật HTTPS

Việc kích hoạt HTTPS khá đơn giản và có thể được thực hiện miễn phí với SSL Let's Encrypt. SSL Let's Encrypt là tổ chức phát hành chứng chỉ nguồn mở phát hành chứng chỉ SSL miễn phí cho quản trị web để mã hóa lưu lượng truy cập vào trang web của họ.

Cài đặt snap-in trong hệ điều hành bằng lệnh sau. Lưu ý rằng phân đoạn này sẽ sử dụng một daemon snap để cài đặt tất cả các gói được yêu cầu thay vì apt hoặc apt-get.

Snap là quản lý gói thay thế và là một công cụ triển khai có thể được sử dụng để cài đặt các gói trong Ubuntu và nhiều hệ điều hành Linux khác. Điều này không bắt buộc phải cài đặt khi có Ubuntu 16.04 LTS hoặc bất kỳ phiên bản cao hơn nào khác. Tuy nhiên, hãy chạy lệnh cuối cùng để đảm bảo snap được cập nhật.

Mã nguồn [Chọn]
$ sudo apt update
Mã nguồn [Chọn]
$ sudo apt install snapd
Mã nguồn [Chọn]
$ sudo snap install core
Mã nguồn [Chọn]
$ sudo snap refresh core
Cài đặt Certbot để cấu hình và gia hạn chứng chỉ SSL cho cả hai tên miền. Nếu không có Certbot, chứng chỉ SSL phải được cài đặt theo cách thủ công. Trên hết, việc gia hạn cũng phải được thực hiện theo cách thủ công.

Đây có thể là một vấn đề vì chứng chỉ SSL Let's Encrypt sẽ hết hạn sau 3 tháng sau đó. Do đó, chứng chỉ SSL phải được gia hạn 3 tháng một lần để đảm bảo trang web có thể hoạt động bình thường như mong đợi.

Sử dụng lệnh sau để cài đặt Certbot một cách dễ dàng.

Mã nguồn [Chọn]
$ sudo snap install --classic certbot
Certbot được cài đặt trong thư mục /snap/bin/certbot. Để chạy tập tin thực thi Certbot thông qua dòng lệnh mà không chỉ định đường dẫn đầy đủ của nó, hãy chạy lệnh sau. Nó tạo ra một liên kết tượng trưng giữa /snap/bin/certbot và thư mục /usr/bin/certbot, do đó cho phép tập tin thực thi Certbot chạy trên giao diện dòng lệnh mà không cần chỉ định đường dẫn đầy đủ của nó.

Mã nguồn [Chọn]
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Cấu hình phiên bản Nginx trong hệ thống bằng lệnh sau. Có một lệnh khác nhắm mục tiêu trực tiếp đến tên miền cụ thể khi cấu hình SSL. Lệnh thứ 2 được chỉ định bên dưới sẽ cài đặt và cấu hình chứng chỉ SSL cho tên miền được chỉ định.

Mã nguồn [Chọn]
$ sudo certbot –nginx
Mã nguồn [Chọn]
$ certbot --nginx -d vietnetwork.vn
Mã nguồn [Chọn]
$ certbot --nginx -d vietnetwork.net
Chạy lệnh sau để mô phỏng quá trình gia hạn. Lệnh thực tế không có tùy chọn –dry-run được thực thi tự động vì Certbot cấu hình cronjob để chạy lệnh tự động sau một vài lần sau đó.

Cần phải kiểm tra chạy thử để đảm bảo Certbot có thể gia hạn chứng chỉ mà không gặp bất kỳ trở ngại nào.

Mã nguồn [Chọn]
$ sudo certbot renew --dry-run
Việc cấu hình nhiều tên miền trong một máy chủ web Nginx khá dễ dàng vì nó cung cấp rất nhiều tùy chọn để làm cho quá trình trở nên dễ dàng.

Certbot giúp bạn có thể cài đặt chứng chỉ SSL cho nhiều tên miền cho máy chủ web Nginx. Là chứng chỉ SSL, hướng dẫn này sử dụng SSL Let's Encrypt cung cấp chứng chỉ SSL miễn phí cho bất kỳ số tên miền nào.

Nhược điểm duy nhất của SSL Let's Encrypt là thời gian tồn tại ngắn, nhưng Certbot đảm bảo rằng nó sẽ không thành vấn đề với quản trị viên web với quy trình gia hạn tự động của nó.