Triển khai web server với virtual host và SSL
1. Chuẩn bị môi trường
Bây giờ đã đến lúc gom mọi thứ lại với nhau. Hôm nay chúng ta sẽ triển khai server với nhiều virtual hosts và kết nối chúng với HTTPS. Chúng ta sẽ thử nghiệm, gỡ lỗi và cấu hình hoàn chỉnh.
Nhiệm vụ của chúng ta
Trong dự án này, chúng ta sẽ triển khai hai trang web trên một web server:
- example.com
- test.com
Đối với mỗi trang web, chúng ta sẽ cấu hình virtual host, kết nối HTTPS, và thực hiện các bước gỡ lỗi và kiểm tra hoạt động. Sẵn sàng chưa? Bắt đầu thôi nào!
Chuẩn bị
Trước khi bắt đầu, hãy chắc chắn rằng mọi thứ đã được cấu hình đúng:
Bạn đã có một web server được cài đặt (Nginx hoặc Apache).
Nếu bạn sử dụng Nginx:
sudo apt-get update sudo apt-get install nginx
Hoặc Apache:
sudo apt-get update sudo apt-get install apache2
Gói Certbot để làm việc với SSL đã được cài đặt.
Đối với Nginx:
sudo apt-get install certbot python3-certbot-nginx
Đối với Apache:
sudo apt-get install certbot python3-certbot-apache
Bạn có quyền truy cập vào server nơi đã cấu hình DNS cho các tên miền example.com và test.com, hoặc có thể sử dụng
/etc/hosts
cho các thử nghiệm.
2. Cấu hình thư mục cho từng trang web
Bắt đầu với việc tạo thư mục và tệp cho các trang web của chúng ta.
Bước 1: Tạo thư mục cho các trang web
sudo mkdir -p /var/www/example.com
sudo mkdir -p /var/www/test.com
Bước 2: Tạo tệp HTML test
Tạo một tệp HTML đơn giản cho mỗi trang web:
example.com
sudo nano /var/www/example.com/index.html
Nội dung:
<!DOCTYPE html>
<html>
<head>
<title>Chào mừng đến example.com</title>
</head>
<body>
<h1>Đây là example.com</h1>
<p>Chào mừng đến example.com! Trang web đã hoạt động và an toàn với SSL!</p>
</body>
</html>
test.com
sudo nano /var/www/test.com/index.html
Nội dung:
<!DOCTYPE html>
<html>
<head>
<title>Chào mừng đến test.com</title>
</head>
<body>
<h1>Đây là test.com</h1>
<p>Chào mừng đến test.com! Trang web đã chạy và an toàn với SSL!</p>
</body>
</html>
3. Cấu hình virtual host
Chúng ta sẽ tạo file cấu hình riêng biệt cho từng website.
Bước 1: Cấu hình cho Nginx
example.com
sudo nano /etc/nginx/sites-available/example.com
Nội dung:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
test.com
sudo nano /etc/nginx/sites-available/test.com
Nội dung:
server {
listen 80;
server_name test.com www.test.com;
root /var/www/test.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Kích hoạt cấu hình:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
Khởi động lại server:
sudo nginx -t
sudo systemctl reload nginx
Bước 2: Cấu hình cho Apache
example.com
sudo nano /etc/apache2/sites-available/example.com.conf
Nội dung:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
test.com
sudo nano /etc/apache2/sites-available/test.com.conf
Nội dung:
<VirtualHost *:80>
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com
<Directory /var/www/test.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Kích hoạt cấu hình:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
sudo systemctl reload apache2
4. Cấu hình HTTPS cho các trang web
Giờ chúng ta sẽ kết nối SSL cho cả hai trang web bằng Let’s Encrypt.
sudo certbot --nginx
# hoặc cho Apache:
sudo certbot --apache
Quá trình sẽ yêu cầu bạn chọn các trang web để cấp phát chứng chỉ. Chọn example.com
và test.com
. Certbot sẽ tự động cập nhật cấu hình của server.
5. Kiểm tra hoạt động của các trang web
Sau khi hoàn thành cấu hình, hãy truy cập vào các trang web của bạn:
Bạn sẽ nhìn thấy các trang HTML đã được tạo ra. Đảm bảo rằng trình duyệt hiển thị "An toàn" (Secure) trong thanh địa chỉ.
6. Debug và kiểm tra
Nếu có gì đó không đúng, kiểm tra logs:
Đối với Nginx:
sudo tail -f /var/log/nginx/error.log
Đối với Apache:
sudo tail -f /var/log/apache2/error.log
Hoặc kiểm tra độ truy cập qua curl
:
curl -I http://example.com
curl -I https://example.com
7. Gia hạn chứng chỉ
Certbot tự động cập nhật chứng chỉ bằng cách sử dụng cron
của hệ thống. Để kiểm tra, bạn có thể chạy thủ công:
sudo certbot renew --dry-run
Như vậy đấy, bước từng bước, chúng ta đã cấu hình web server hỗ trợ nhiều trang web và HTTPS. Cậu vừa hoàn thành cả một hành trình từ một server trống không cho đến một server hoạt động với virtual hosts và SSL. Giờ đây server của cậu đã sẵn sàng để trình diễn các trang web của mình ra thế giới. Ngầu đúng không?
GO TO FULL VERSION