2.1. Quản trị Web Server trên Windows (IIS).
2.1.1. Lý thuyết cơ bản về IIS
Internet Information Services (IIS) là máy chủ web do Microsoft phát triển, tích hợp sẵn trong Windows Server.
Application Pools (Nhóm ứng dụng): Là tính năng cô lập các ứng dụng web. Mỗi Website nên được đưa vào một Application Pool riêng. Nếu Website A bị lỗi (Crash) hoặc bị tấn công, nó sẽ chỉ làm hỏng Application Pool của Website A, Website B vẫn hoạt động bình thường.
Bindings (Tên miền liên kết): Máy chủ thường chỉ có 1 địa chỉ IP và 1 cổng HTTP (Port 80). Để chạy nhiều website (ví dụ:
web1.com,web2.com), ta điền tên miền vào ô Host name khi tạo web. IIS sẽ đọc gói tin HTTP Header để trả về đúng thư mục của web đó.Virtual Directory (Thư mục ảo): Ánh xạ (map) một URL web tới một thư mục vật lý nằm ngoài thư mục gốc của website.
2.1.2. THỰC HÀNH: Triển khai Website với IIS. Thực hành trên máy ảo
Tình huống: Tạo một website có tên miền là tintuc.local chạy trên máy chủ Windows Server.
Bước 1: Cài đặt dịch vụ Web Server (IIS)
Mở ứng dụng Server Manager.
Click chọn Add roles and features. Bấm Next liên tục cho đến phần Server Roles.
Trong danh sách Roles, tích chọn ô Web Server (IIS). Một bảng thông báo hiện ra, bấm Add Features.
Bấm Next liên tục đến cuối và bấm Install. Đợi cài đặt xong, bấm Close.
Bước 2: Chuẩn bị thư mục chứa mã nguồn Website
Mở File Explorer, truy cập vào ổ C:\inetpub\wwwroot (thư mục gốc mặc định của IIS).
Tạo một thư mục mới tên là
tintuc_web.Mở thư mục
tintuc_web, tạo fileindex.html.Mở file
index.htmlbằng Notepad, gõ dòng chữ:<h1>Chao mung den voi trang Tin tuc</h1>, lưu lại.
Bước 3: Tạo Website trên IIS (Cấu hình Bindings)
Mở phần mềm Internet Information Services (IIS) Manager.
Ở cột trái, click chuột phải vào thư mục Sites -> Chọn Add Website…
Điền thông số:
Site name:
TinTucPhysical path: Trỏ đến
C:\inetpub\wwwroot\tintuc_web.Host name:
tintuc.local(Kỹ thuật Bindings).
Bấm OK.
Bước 4: Chỉnh sửa file Hosts để kiểm tra (Giả lập DNS)
Mở Notepad dưới quyền quản trị (Run as administrator).
Mở file theo đường dẫn:
C:\Windows\System32\drivers\etc\hosts.Thêm dòng sau vào cuối file:
127.0.0.1 tintuc.localLưu file. Mở trình duyệt web gõ
http://tintuc.localđể xem kết quả.
Hướng dẫn chi tiết từng bước để Test (Kiểm tra) Website IIS chạy trên Máy ảo (Virtual Machine) từ Máy thật (Host PC).
Trong kịch bản này, Máy ảo (đang chạy Windows Server) sẽ đóng vai trò là Máy chủ (Server), còn Máy tính thật của học sinh (đang chạy Windows 10/11) sẽ đóng vai trò là Máy khách (Client).
BƯỚC 1: Đảm bảo Máy ảo và Máy thật có thể “nhìn thấy” nhau
Trước khi test, bạn cần chắc chắn phần mềm ảo hóa (VMware hoặc VirtualBox) đã được cấu hình card mạng đúng cách.
Trên phần mềm ảo hóa, vào phần cài đặt mạng (Network Adapter) của máy ảo Windows Server.
Chọn chế độ NAT (khuyên dùng) hoặc Bridged hoặc Host-only.
Khởi động máy ảo lên.
BƯỚC 2: Lấy địa chỉ IP của Máy ảo (Web Server)
Bên trong Máy ảo Windows Server, nhấn tổ hợp phím
Windows + R, gõcmdvà nhấn Enter.Trong cửa sổ màu đen, gõ lệnh
ipconfigvà nhấn Enter.Ghi lại địa chỉ IPv4 Address của máy ảo. (Ví dụ:
192.168.100.10).
BƯỚC 3: Mở Port tường lửa trên Máy ảo (Bước rất hay quên)
Mặc định Windows Server có thể bật Firewall chặn các truy cập từ bên ngoài vào. Bạn cần mở cổng 80 (HTTP) để máy thật có thể truy cập Web.
Bên trong Máy ảo, mở Windows Defender Firewall with Advanced Security.
Chọn Inbound Rules (Luật kết nối đến) -> Ở cột bên phải chọn New Rule…
Chọn Port -> Next.
Chọn TCP và mục Specific local ports gõ 80 -> Next.
Chọn Allow the connection -> Next liên tục, đặt tên cho Rule này là
Open Port 80 Web IIS-> Finish.
BƯỚC 4: Ping kiểm tra kết nối từ Máy thật (Client)
Thu nhỏ máy ảo lại, quay trở về giao diện Windows của Máy thật.
Trên máy thật, mở
cmd(Windows + R -> cmd).Gõ lệnh:
ping 192.168.100.10(Thay bằng IP bạn đã lấy ở Bước 2).Nếu kết quả báo Reply from…: 2 máy đã thông mạng.
Nếu báo Request timed out: Bạn cần kiểm tra lại card mạng của máy ảo hoặc tắt tạm Firewall trên máy ảo.
BƯỚC 5: Cấu hình file hosts trên Máy thật
Vì tên miền giả định (ví dụ: tintuc.local) không tồn tại trên Internet, bạn phải “dạy” cho máy thật biết rằng tên miền này trỏ về IP của máy ảo.
Trên Máy thật, bấm nút Start, gõ Notepad.
Click chuột phải vào biểu tượng Notepad, chọn Run as administrator (Bắt buộc chạy bằng quyền quản trị mới lưu được file).
Trong Notepad, chọn File -> Open. Trỏ tới đường dẫn:
C:\Windows\System32\drivers\etc.Ở góc dưới bên phải cửa sổ mở file, đổi Text Documents (.txt)* thành All Files (.) để hiển thị các file ẩn.
Nháy đúp để mở file hosts.
Kéo xuống dòng cuối cùng của file, gõ thêm:
192.168.100.10 tintuc.local(Lưu ý: Thay192.168.100.10bằng IP thực tế của máy ảo ở Bước 2).Nhấn Ctrl + S để lưu lại và đóng Notepad.
BƯỚC 6: Trải nghiệm thành quả trên trình duyệt
Ngay trên Máy thật, mở trình duyệt web (Google Chrome, Edge, Cốc Cốc…).
Gõ lên thanh địa chỉ:
http://tintuc.localvà nhấn Enter.Trình duyệt của máy thật sẽ gửi yêu cầu xuyên qua phần mềm ảo hóa, đi vào máy ảo Windows Server, chui qua cổng 80 của Firewall, đến phần mềm IIS. IIS sẽ phân giải tên miền (Bindings), lấy mã nguồn HTML và trả ngược lại ra ngoài trình duyệt máy thật.
Kết quả: Màn hình Chrome trên máy thật hiển thị đúng giao diện Website bạn đã tạo bên trong máy ảo.
💡 Một số lỗi thường gặp khi học sinh thực hành:
Lỗi trình duyệt tự nhảy sang tìm kiếm Google: Trình duyệt hiện nay rất thông minh, nếu gõ
tintuc.localnó tưởng là từ khóa tìm kiếm. Hãy gõ đầy đủ chữhttp://ở phía trước (VD:http://tintuc.local).Lỗi không lưu được file hosts: Do quên mở Notepad bằng quyền Run as administrator.
Lỗi trang web cứ xoay vòng vòng rồi báo Time Out: 99% là do chưa làm Bước 3 (mở Port 80 trên Firewall của máy ảo) hoặc Firewall của mạng chưa thông. Cần tắt tắt tạm Firewall trên máy ảo để test nhanh.
2.2. Triển khai truyền tải dữ liệu an toàn (FTP/SFTP)
2.2.1. Lý thuyết cơ bản về FTP và Isolation
FTP vs SFTP: FTP (Port 21) truyền dữ liệu dạng văn bản rõ, tốc độ nhanh nhưng kém an toàn. SFTP (Port 22) chạy qua giao thức SSH, mọi dữ liệu và mật khẩu đều được mã hóa.
FTP User Isolation (Cô lập người dùng): Khi máy chủ chứa nhiều website của nhiều khách hàng, tính năng này sẽ khóa chặt (chroot jail) người dùng ở đúng thư mục của họ. Khi đăng nhập, họ không thể lùi ra thư mục gốc ổ C để xem trộm dữ liệu hệ thống hoặc của người khác.
2.2.2. THỰC HÀNH: Cấu hình FTP với tính năng Cô lập người dùng
Trong kịch bản này, Máy ảo (Windows Server) sẽ đóng vai trò là Máy chủ FTP, còn Máy thật (Windows 10/11) sẽ đóng vai trò là Máy khách (Client).
BƯỚC 1: Chuẩn bị cấu hình mạng và lấy IP của Máy ảo
Đảm bảo Card mạng của máy ảo đang ở chế độ NAT hoặc Bridged (giống như bài thực hành Web).
Bật máy ảo Windows Server, mở
cmd, gõipconfigđể lấy địa chỉ IP. (Giả sử IP máy ảo là192.168.100.10).Từ Máy thật, mở
cmdvà gõping 192.168.100.10để đảm bảo máy thật và máy ảo đã thông mạng với nhau.
BƯỚC 2: Cấu hình FTP Isolation bên trong MÁY ẢO
Bạn thực hiện y hệt các bước đã học ở bài trước hoàn toàn bên trong Máy ảo:
Tạo Local User: Tạo tài khoản tên
user1(đặt mật khẩu không hết hạn).Tạo cấu trúc thư mục bắt buộc: Vào ổ C: của máy ảo tạo đúng cấu trúc:
C:\FTP_Chung\LocalUser\user1.Cấp quyền Full Control cho
user1trên thư mục của nó.Mở IIS Manager -> Tạo FTP Site mới trỏ vào
C:\FTP_Chung-> Kích hoạt tính năng FTP User Isolation (chọn User name directory).
BƯỚC 3: Mở Port 21 Tường lửa trên Máy ảo (Cực kỳ quan trọng)
FTP hoạt động trên Port 21. Nếu bạn không mở cổng này, máy thật sẽ bị tường lửa của máy ảo chặn lại ngay lập tức.
Bên trong Máy ảo, mở Windows Defender Firewall with Advanced Security.
Chọn Inbound Rules -> New Rule…
Chọn Port -> Chọn TCP, gõ 21 vào ô Specific local ports -> Next.
Chọn Allow the connection -> Next liên tục và đặt tên Rule là
Open FTP Port 21-> Finish. (💡 Mẹo: Để học sinh thực hành test nhanh không bị lỗi “Failed to retrieve directory listing” do kết nối Passive FTP, giáo viên có thể cho học sinh Tắt tạm thời Firewall của máy ảo trong lúc test).
BƯỚC 4: Kiểm tra kết quả từ MÁY THẬT (Đóng vai Khách hàng)
Trên Máy thật, mở phần mềm FileZilla Client (nếu chưa có thì tải bản miễn phí trên mạng).
Điền thông tin kết nối vào thanh ngang trên cùng của FileZilla:
Host:
192.168.100.10(IP của Máy ảo lấy ở Bước 1).Username:
user1Password: Mật khẩu của user1 bạn đã tạo.
Port:
21
Bấm Quickconnect.
Đánh giá kết quả:
Nhìn vào cửa sổ góc dưới bên phải (Remote site), nếu bạn thấy chữ
/(thư mục gốc) trống trơn và bạn có thể thử kéo thả 1 file từ máy thật sang máy ảo thành công -> Đã kết nối FTP thành công.Bấm nút “lùi ra thư mục cha” (
..). Nếu bạn không thể lùi ra ngoài để nhìn thấy ổ C: hoặc thư mụcLocalUsercủa Server -> Tính năng Cô lập (Isolation) đã hoạt động hoàn hảo!
⚠️ 3 Lỗi học sinh hay gặp nhất khi làm bài này trên máy ảo:
Lỗi 530 User cannot log in: 99% là do bước tạo thư mục gõ sai chính tả. Bắt buộc phải là
LocalUser(L và U viết hoa, viết liền), và thư mục con phải trùng 100% với tên đăng nhập (vd:user1).Lỗi Time out / Could not connect to server: Do chưa làm Bước 3 (mở Port tường lửa 21) hoặc máy thật và máy ảo khác dải mạng, chưa ping thấy nhau.
Lỗi ECONNREFUSED – Connection refused: Do lúc khai báo FTP Site trong IIS quên chưa Start dịch vụ FTP, hoặc khai báo sai IP Bindings (Nên để All Unassigned).
2.3. Quản trị Web Server trên Linux (LAMP/LEMP Stack)
2.3.1. Lý thuyết kiến trúc LAMP/LEMP
Hơn 70% website trên Internet hiện nay chạy trên nền tảng Linux mã nguồn mở bằng giao diện dòng lệnh (CLI).
L (Linux): Hệ điều hành nền tảng (Ubuntu, CentOS).
A (Apache) / E (Nginx – đọc là Engine-X): Web Server. Nginx hiện được ưa chuộng hơn vì khả năng chịu tải kết nối đồng thời cực tốt.
M (MariaDB/MySQL): Hệ quản trị Cơ sở dữ liệu.
P (PHP): Ngôn ngữ lập trình xử lý logic.
Server Block (Nginx): Tương đương với Bindings trên IIS, dùng để trỏ tên miền vào đúng thư mục vật lý chứa mã nguồn (vd:
/var/www/html/mywebsite).
2.3.2. THỰC HÀNH: Xây dựng máy chủ LEMP Stack và cài WordPress
PHẦN 1: THAO TÁC TRÊN MÁY ẢO (ĐÓNG VAI TRÒ LÀ WEB SERVER LINUX)
Học sinh khởi động máy ảo Ubuntu/CentOS, mở ứng dụng Terminal (cửa sổ dòng lệnh) và làm việc hoàn toàn bằng lệnh.
Bước 1: Lấy địa chỉ IP và Mở tường lửa (Rất quan trọng)
Gõ lệnh lấy địa chỉ IP của máy ảo:
Baship a(Ghi ra giấy địa chỉ IP, ví dụ:
192.168.100.20)Mở Port 80 (HTTP) trên tường lửa của Ubuntu (UFW) để cho phép máy thật truy cập vào:
Bashsudo ufw allow 80/tcp sudo ufw reload
Bước 2: Cài đặt LEMP Stack (Nginx, MariaDB, PHP)
Cài đặt Web Server Nginx và Database MariaDB:
Bashsudo apt update sudo apt install nginx mariadb-server -yCài đặt PHP và các tiện ích đi kèm bắt buộc cho WordPress:
Bashsudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
Bước 3: Tạo Cơ sở dữ liệu (Database) cho Website
Truy cập vào trình quản lý MySQL:
Bashsudo mysql -u rootCấp Database, User và Mật khẩu (Gõ từng dòng và Enter):
SQLCREATE DATABASE db_wordpress; CREATE USER 'user_wp'@'localhost' IDENTIFIED BY 'MatKhauKho123!'; GRANT ALL PRIVILEGES ON db_wordpress.* TO 'user_wp'@'localhost'; FLUSH PRIVILEGES; EXIT;
Bước 4: Tải mã nguồn WordPress và phân quyền
Tải bộ cài WordPress mới nhất về và giải nén:
Bashcd /tmp wget https://wordpress.org/latest.tar.gz tar -xvzf latest.tar.gzDi chuyển toàn bộ code vào thư mục web:
Bashsudo mv wordpress /var/www/html/myblogCấp quyền (Cực kỳ quan trọng): Để WordPress có thể tự động tải ảnh lên, ta phải giao quyền sở hữu thư mục này cho tài khoản của Nginx (tên là
www-data):Bashsudo chown -R www-data:www-data /var/www/html/myblog sudo chmod -R 755 /var/www/html/myblog
Bước 5: Cấu hình Server Block (Trỏ tên miền)
Dùng trình soạn thảo Nano tạo file cấu hình cho web
myblog.local:Bashsudo nano /etc/nginx/sites-available/myblogDán đoạn cấu hình chuẩn sau vào:
Nginxserver { listen 80; server_name myblog.local; root /var/www/html/myblog; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } }(💡 Lưu ý : Cần kiểm tra phiên bản PHP thực tế đang cài để sửa số
8.1cho đúng).Bấm
Ctrl + O-> Enter để lưu. BấmCtrl + Xđể thoát.Kích hoạt Web và khởi động lại Nginx:
Bashsudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/ sudo systemctl restart nginx
PHẦN 2: THAO TÁC TRÊN MÁY THẬT (ĐÓNG VAI TRÒ LÀ KHÁCH HÀNG)
Học sinh thu nhỏ máy ảo Linux lại, trở về màn hình Windows của máy trường để giả lập làm người dùng đang truy cập Internet.
Bước 1: Sửa file Hosts (Giả lập hệ thống DNS)
Mở Notepad bằng quyền Run as administrator.
Mở file theo đường dẫn
C:\Windows\System32\drivers\etc\hosts.Thêm dòng khai báo để máy tính hiểu tên miền trỏ về máy ảo:
192.168.100.20 myblog.local(Nhập IP máy ảo lấy ở Bước 1 Phần 1).Lưu file lại.
Bước 2: Chạy cài đặt Website trên Trình duyệt
Mở Google Chrome trên Máy thật, gõ vào thanh địa chỉ:
http://myblog.local.Trình duyệt sẽ xuyên qua mạng, gọi vào máy ảo Linux. Màn hình cài đặt WordPress sẽ hiện ra.
Học sinh thực hiện điền các thông tin kết nối Database đã tạo ở máy ảo:
Database Name:
db_wordpressUsername:
user_wpPassword:
MatKhauKho123!
Bấm Run Installation, tạo tài khoản Admin (Quản trị viên) và đăng nhập vào bảng điều khiển (Dashboard) của Website. Hoàn thành bài Lab!
⚠️ 3 Lỗi học sinh thường xuyên gặp phải ở bài này:
Lỗi 502 Bad Gateway trên trình duyệt: * Nguyên nhân: Khai báo sai đường dẫn file
php-fpm.socktrong Nginx. Ví dụ máy cài PHP 8.3 nhưng cấu hình Nginx lại gõ là 8.1.Cách sửa: Vào Linux gõ lệnh
ls /var/run/php/để xem tên file chuẩn xác là gì và sửa lại trong file cấu hình nano.
Trình duyệt báo “This site can’t be reached” (Time out):
Nguyên nhân: Chưa mở Port 80 trên tường lửa UFW của Linux hoặc máy thật và máy ảo khác lớp mạng.
Cài WordPress xong, up ảnh lên báo lỗi “Unable to create directory”:
Nguyên nhân: Quên chạy lệnh
chownở Bước 4 (Phần 1). Web Server không có quyền ghi file vào ổ cứng.
3. Câu hỏi ôn tập và Kiểm tra (1 giờ)
Hỏi: Application Pool trong IIS có tác dụng gì? Điều gì xảy ra nếu tất cả 10 website trên máy chủ đều chạy chung trong 1 Application Pool?
Hỏi: Để cấu hình 3 website hoạt động độc lập trên cùng một Máy chủ Windows (cùng 1 IP và cùng Port 80), bạn phải sử dụng thiết lập nào trong IIS?
Hỏi: FTP User Isolation giải quyết bài toán bảo mật nào khi cung cấp dịch vụ Hosting cho nhiều khách hàng khác nhau?
Hỏi: Trong hệ sinh thái LEMP Stack, tiến trình
MariaDBđóng vai trò gì? Kể tên một câu lệnh Linux để cấp quyền sở hữu thư mục web cho tài khoản Nginx (www-data).Kiểm tra thực hành: Giảng viên yêu cầu học sinh tự cấu hình thành công 1 Virtual Directory trên IIS và thực hiện kết nối bằng FileZilla an toàn (Không dùng tài liệu).