I. Tìm Hiểu
Cấu hình Virtual Host cho Apache là quá trình thiết lập các cấu hình khác nhau trên một máy chủ Apache để quản lý nhiều tên miền hoặc trang web trên cùng một máy chủ vật lý. Virtual Host (Vhost) cho phép bạn sử dụng một máy chủ Apache để phục vụ nhiều trang web hoặc ứng dụng web khác nhau bằng cách ánh xạ các tên miền hoặc địa chỉ IP tới các thư mục gốc khác nhau trên hệ thống tệp của máy chủ.Có hai loại Virtual Host chính trong Apache:
- Name-based Virtual Host: Dựa trên tên miền để phân biệt các trang web. Điều này cho phép bạn sử dụng cùng một địa chỉ IP để phục vụ nhiều trang web khác nhau.
- IP-based Virtual Host: Dựa trên địa chỉ IP để phân biệt các trang web. Mỗi trang web sẽ có một địa chỉ IP riêng.
II. Cấu hình Virtual Host cho Apache
1 . IP-based Virtual Host
Phần HTTP (<VirtualHost *:80>)
Bash:
<VirtualHost *:80>
ServerName kienthuclinux.info
ServerAdmin webmaster@kienthuclinux.info
DocumentRoot /var/www/html/kienthuclinux.info
<Directory /var/www/html/kienthuclinux.info>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- <VirtualHost *:80>:
- Chỉ định rằng cấu hình này áp dụng cho tất cả các yêu cầu HTTP trên cổng 80.
- * có nghĩa là nó sẽ lắng nghe trên tất cả các địa chỉ IP mà máy chủ có.
- ServerName kienthuclinux.info:
- Định nghĩa tên miền chính cho VirtualHost này.
- Apache sẽ sử dụng tên miền này để xác định cấu hình nào sẽ được áp dụng cho yêu cầu đến.
- ServerAdmin webmaster@kienthuclinux.info:
- Địa chỉ email của quản trị viên máy chủ.
- Nếu có lỗi máy chủ, địa chỉ email này có thể được hiển thị cho người dùng để họ có thể liên hệ với quản trị viên.
- DocumentRoot /var/www/html/kienthuclinux.info:
- Đường dẫn tới thư mục gốc của website.
- Apache sẽ phục vụ các tệp từ thư mục này khi có yêu cầu tới kienthuclinux.info.
- <Directory /var/www/html/kienthuclinux.info>:
- Bắt đầu một khối cấu hình cho thư mục cụ thể.
- AllowOverride All:
- Cho phép ghi đè các thiết lập cấu hình của Apache bằng các tệp .htaccess nằm trong thư mục /var/www/html/kienthuclinux.info.
- Tùy chọn này rất quan trọng cho phép các quy tắc cấu hình và bảo mật bổ sung trong .htaccess.
- ErrorLog ${APACHE_LOG_DIR}/error.log:
- Đường dẫn tới tệp log ghi lại các lỗi của Apache.
- ${APACHE_LOG_DIR} là một biến môi trường chứa đường dẫn tới thư mục log của Apache, thường là /var/log/apache2.
- CustomLog ${APACHE_LOG_DIR}/access.log combined:
- Đường dẫn tới tệp log ghi lại các yêu cầu truy cập tới website.
- combined là định dạng log bao gồm thông tin chi tiết về mỗi yêu cầu.
Phần HTTPS (<VirtualHost *:443>)
Bash:
<VirtualHost *:443>
ServerName kienthuclinux.info
ServerAdmin webmaster@kienthuclinux.info
DocumentRoot /var/www/html/kienthuclinux.info
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/kienthuclinux.info/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/kienthuclinux.info/private.key
SSLCertificateChainFile /etc/apache2/ssl/kienthuclinux.info/ca_bundle.crt
<Directory /var/www/html/kienthuclinux.info>
AllowOverride All
</Directory>
</VirtualHost>
- <VirtualHost *:443>:
- Chỉ định rằng cấu hình này áp dụng cho tất cả các yêu cầu HTTPS trên cổng 443.
- ServerName domain.com:
- Định nghĩa tên miền chính cho VirtualHost này.
- Apache sẽ sử dụng tên miền này để xác định cấu hình nào sẽ được áp dụng cho yêu cầu đến.
- ServerAdmin webmaster@domain.com:
- Địa chỉ email của quản trị viên máy chủ.
- Nếu có lỗi máy chủ, địa chỉ email này có thể được hiển thị cho người dùng để họ có thể liên hệ với quản trị viên.
- DocumentRoot /var/www/html/domain.com:
- Đường dẫn tới thư mục gốc của website.
- Apache sẽ phục vụ các tệp từ thư mục này khi có yêu cầu tới domain.com.
- SSLEngine on:
- Bật chế độ SSL cho VirtualHost này để xử lý các kết nối HTTPS.
- SSLCertificateFile /etc/apache2/ssl/domain.com/certificate.crt:
- Đường dẫn tới tệp chứng chỉ SSL của bạn.
- Đây là tệp chứa chứng chỉ được cấp bởi cơ quan cấp chứng chỉ (CA).
- SSLCertificateKeyFile /etc/apache2/ssl/domain.com/private.key:
- Đường dẫn tới tệp khóa riêng của chứng chỉ SSL.
- Đây là tệp bảo mật và không nên chia sẻ công khai.
- SSLCertificateChainFile /etc/apache2/ssl/domain.com/ca_bundle.crt:
- Đường dẫn tới tệp chuỗi chứng chỉ (certificate chain).
- Tệp này chứa chuỗi các chứng chỉ của CA dẫn đến chứng chỉ gốc.
- <Directory /var/www/html/domain.com>:
- Bắt đầu một khối cấu hình cho thư mục cụ thể.
- AllowOverride All:
- Cho phép ghi đè các thiết lập cấu hình của Apache bằng các tệp .htaccess nằm trong thư mục /var/www/html/domain.com.
2. IP-based Virtual Host
Virtual Host trong Apache, bạn có thể thay đổi phần <VirtualHost *:80> hoặc <VirtualHost *:443> thành <VirtualHost 192.168.1.100:80> hoặc <VirtualHost 192.168.1.100:443>, trong đó 192.168.1.100 là địa chỉ IP mà bạn muốn sử dụng.Ví dụ về cấu hình Virtual Host chỉ định địa chỉ IP cụ thể:
Cấu hình HTTP Configuration không có ssl
Bash:
<VirtualHost 192.168.1.100:80>
ServerName kienthuclinux.info
ServerAlias www.kienthuclinux.info
DocumentRoot /var/www/kienthuclinux.info/public_html
ErrorLog ${APACHE_LOG_DIR}/kienthuclinux.info_error.log
CustomLog ${APACHE_LOG_DIR}/kienthuclinux.info_access.log combined
<Directory /var/www/kienthuclinux.info/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Cấu hình có ssl
Bash:
<VirtualHost 192.168.1.100:443>
ServerName kienthuclinux.info
ServerAlias www.kienthuclinux.info
DocumentRoot /var/www/kienthuclinux.info/public_html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/kienthuclinux.info.crt
SSLCertificateKeyFile /etc/ssl/private/kienthuclinux.info.key
SSLCertificateChainFile /etc/ssl/certs/kienthuclinux.info.chain.pem
ErrorLog ${APACHE_LOG_DIR}/kienthuclinux.info_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/kienthuclinux.info_ssl_access.log combined
<Directory /var/www/kienthuclinux.info/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Giải thích thêm.
- <VirtualHost 192.168.1.100:80> và <VirtualHost 192.168.1.100:443>:
- Chỉ định rằng Virtual Host này sẽ chỉ lắng nghe trên địa chỉ IP cụ thể 192.168.1.100 và cổng 80 hoặc 443.
- Điều này giúp bạn quản lý các yêu cầu đến từ địa chỉ IP này cụ thể hơn.
- Các thành phần còn lại giống như trong ví dụ trước:
- ServerName, ServerAlias, DocumentRoot, ErrorLog, CustomLog, và khối <Directory> đều được giữ nguyên.
- Các thiết lập SSL trong phần HTTPS cũng không thay đổi.
Tổng kết
Cấu hình VirtualHost này giúp Apache phục vụ các yêu cầu HTTP và HTTPS cho cùng một website. Nó đảm bảo rằng website của bạn có thể được truy cập qua cả hai giao thức, và cung cấp bảo mật qua HTTPS với SSL. Cấu hình cũng bao gồm các thiết lập log để ghi lại các lỗi và truy cập, cũng như cho phép các tệp .htaccess để thêm các quy tắc cấu hình bổ sung nếu cần.
Sửa lần cuối: