IIS 7

Trong chiến lược giành thị phần Internet của Microsoft, máy chủ Web IIS (Internet Information Service) là một trong những ưu tiên hàng đầu. Phiên bản đầu tiên IIS 1.0 được giới thiệu cách đây 11 năm cùng với Windows NT 4.0 vào năm 1996. Đến năm 1999, IIS 5.0 (trên nền Windows Server 2000) nhanh chóng trở thành máy chủ web phổ biến nhất vào thời điểm đó, mặc dù chỉ vài tháng sau nó phải đối mặt với những lỗ hổng bảo mật nghiêm trọng, bị các virus như Red Code, Nimbda khai thác. Phiên bản gần đây nhất, IIS 6.0 trên nền Windows Server 2003 được đánh giá là máy chủ web chắc chắn, ổn định, nhờ những thay đổi quan trọng trong kiến trúc. Kể từ lúc được phát hành đến nay, IIS 6.0 mới chỉ mắc một lỗi bảo mật nghiêm trọng, một "thành tích" đáng ghi nhận với sản phẩm của Microsoft!

Cùng với sự ra đời của hệ điều hành mới Windows Vista, IIS cũng được nâng cấp lên phiên bản 7.0. Với một hệ điều hành mang tính cách mạng như Vista, không có gì khó hiểu khi IIS 7.0 thực hiện bước nhảy vọt so với các phiên bản trước đây. Được viết lại trên nền tảng mã của IIS 6.0, với những cải tiến tốc độ, độ ổn định và khả năng an ninh, mục tiêu của IIS 7.0 là trở thành một máy chủ web uyển chuyển và dễ dùng, cũng như đủ mạnh để chạy các ứng dụng web trong tương lai. Được coi là máy chủ web nhiều tham vọng nhất của Microsoft từ trước đến nay, cũng như là lần nâng cấp có những thay đổi quan trọng nhất trong lịch sử, IIS 7.0 hứa hẹn là "món quà” hấp dẫn cho giới CNTT. Bài viết này sẽ giới thiệu những điểm mới ấn tượng nhất trong IIS 7.0, cũng như cách Microsoft đã làm để đạt được điều đó.

Máy chủ web dạng Module

Vista là hệ điều hành đầu tiên của Microsoft hiện thực việc module hóa: phía dưới là nhân của hệ điều hành, phía trên là các phần tương đối độc lập, mà việc có chúng hay không không ảnh hưởng đến phần còn lại của hệ thống. Điều này cho phép người dùng lựa chọn phiên bản chứa các module thích hợp với mình. Ý tưởng này cũng đã được đưa vào thiết kế của IIS 7.0. Thay vì phát triển IIS thành một khối như các phiên bản trước, IIS chia máy chủ web thành 2 phần: một nhân được thiết kế khá nhỏ gọn và hơn 40 module thành phần chạy trên nó.

Đây là một thiết kế hết sức linh hoạt cho phép nhà quản trị có thể cài đặt/gỡ bỏ các module thành phần bất cứ lúc nào, thậm chí cấm một tính năng nào đó không chạy với một ứng dụng web cụ thể. Cấu trúc này là một phần đặc biệt quan trọng của IIS, là cơ sở cho các cải tiến khác trong phiên bản 7.0.

Thiết kế dạng module giúp nhanh chóng xây dựng máy chủ web có thành phần tối thiểu đáp ứng được nhu cầu sử dụng. Do loại bỏ các phần không cần thiết nên đồng thời giảm được nguy cơ bị tấn công, cũng như tăng tốc độ một cách đáng kể do không phải thực thi các đoạn mã không cần thiết.

Với các nhà phát triển, điều đáng quan tâm là các thành phần bổ sung của IIS 7.0 được xây dựng trên một nền tảng API mở rộng, dựa trên nền mở rộng ISAPI trước đây. Bạn có thể xây dựng các thành phần bổ sung của riêng mình, sau đó thêm nó vào máy chủ IIS, hoặc thay thế một thành phần đang có, giúp tăng cường máy chủ web một cách mềm dẻo và dễ dàng.

Đơn giản hoá quá trình triển khai và cấu hình

IIS 7.0 sử dụng một hệ thống cấu hình mới, được xây dựng dựa trên cấp bậc của các file XML. Hệ thống cấu hình này có nhiều điểm tương tự với hệ thống cấu hình của ASP.NET.

Ở cấp độ máy chủ, có 2 file riêng biệt chứa những thiết lập cơ bản nhất của hệ thống:

• system32\inetsrv\applicationHost.config: Chứa các thiết lập mặc định của IIS

• \windows\microsoft.net\framework\v2.0.50727\config\machine.config: Chứa các thiết lập mặc định của .NET Framework

Ở cấp độ ứng dụng là file web.config, chứa những thiết lập cụ thể dùng cho ứng dụng đó. Trong phiên bản 7.0, thậm chí IIS và ASP.NET có thể sử dụng chung file web.config để lưu cấu hình, dưới đây là một ví dụ.

Nhờ cách cấu hình này đã tận dụng được ưu điểm của ASP.NET, giúp xây dựng các trang web dạng "portable", có thể copy sang một máy chủ khác và chạy trực tiếp mà không cần chỉnh sửa.

Bên cạnh khả năng chỉnh sửa trực tiếp các file cấu hình (bằng một trình soạn thảo như Notepad chẳng hạn), IIS 7.0 vẫn tiếp tục hỗ trợ việc thiết lập bằng Admin Base Object (ABO), hoặc Active Directory Service Interfaces (ADSI) và đối tượng Windows Management Instrumental (WMI). Phần lớn các đoạn mã cấu hình viết dựa trên các công cụ này đều có thể dùng lại, do IIS 7.0 cung cấp một lớp tương thích đối với ABO. Bên cạnh đó, IIS 7.0 cũng bổ sung thêm các công cụ quản lý và một số hàm API nhằm đơn giản hoá công việc quản lý, đồng thời cho phép cấu hình và triển khai một cách tự động.

Tích hợp tốt hơn với ASP.NET

Không có gì khó hiểu khi Microsoft tích cực lăng xê cho "gà nhà”. Khuyết điểm lớn nhất của ASP.NET chính là chỉ chạy trên nền IIS/Windows, khiến cho sự phổ biến của nó bị hạn chế. Tuy nhiên, Microsoft đã đáp trả bằng cách đưa ASP.NET 2.0 trên nền IIS 7.0 thành một khung phát triển các ứng dụng web xuất sắc, bằng việc tích hợp ASP.NET vào nhân của máy chủ web (ASP.NET 1.0 không được hỗ trợ trên IIS 7.0, và Microsoft khuyến cáo sử dụng ASP.NET 2.0 trên máy chủ này).

Chúng ta hãy xem cấu trúc của việc tích hợp này:

Trong IIS 6.0 trở về trước, ASP.NET chỉ là một mở rộng của IIS thông qua ISAPI.

Khi có một yêu cầu (request) đến một file ASP.NET, nó sẽ được xử lý bằng IIS trước, sau đó mới chuyển sang cho ASP.NET (aspnet_isapi.dll). Với các yêu cầu không phải đến một file ASP.NET, như các trang ASP, sẽ được xử lý bởi IIS và các mở rộng ISAPI khác. ASP.NET "đứng ngoài cuộc" trong quá trình xử lý này.
Hạn chế chính của kiểu xử lý này là các dịch vụ cung cấp bởi ASP.NET, cũng như mã ASP.NET sẽ không thể dùng bởi các request không phải là ASP.NET. Ngoài ra, các module của ASP.NET sẽ không thể tác động đến các phần xử lý request của IIS trước và sau khi ASP.NET thực thi.

Trong IIS 7.0, ASP không phải là một bổ sung cho IIS mà thực sự là một phần trong nhân của IIS. Một request chứa nội dung bất kì được xử lý bởi IIS, bao gồm cả các module của IIS và của ASP.NET trong tất cả các quá trình. Điều này cho phép các request tới các trang ASP, PHP, .. có thế sử dụng các dịch vụ của ASP.NET như Forms Authentication hay Output Cache,...

Khả năng "cắm" trực tiếp vào máy chủ cho phép các module của ASP.NET thay thế, chạy trước hay sau bất kì chức năng nào của IIS.

Ngoài ra, khi tích hợp trực tiếp, các hàm API mở rộng của ASP.NET cho phép xử lý request sâu hơn. Ví dụ, các module ASP.NET có thể sửa đổi header của các request trước khi các phần khác xử lý, thêm header Accept-Language trước khi các ứng dụng ASP thực thi theo thứ tự để bắt buộc gửi các nội dung đã địa phương hóa về client dựa trên tùy chọn của người dùng.

Tăng cường An ninh

Được xây dựng trên nền IIS 6.0, IIS 7.0 có những thay đổi về mặt cấu trúc để tăng cường an toàn, đồng thời cung cấp các công cụ giúp bạn xây dụng web an toàn hơn.

Với cấu trúc module như đã trình bày ở trên, IIS 7.0 có thể loại bỏ tất cả những gì không cần thiết, làm giảm những lỗ hổng mà hacker có thể lợi dụng. Mặt khác, khi một điểm yếu được tìm thấy trong các phần mà bạn không dùng, bạn sẽ không phải ngừng chạy web của mình để vá, đồng nghĩa với việc tăng độ sẵn sàng cũng như giảm chi phí bảo trì hệ thống.

Về phía các nhà phát triển, IIS 7.0 cung cấp những công cụ mạnh mẽ hỗ trợ cho việc tăng cường an ninh cho web. Với việc tích hợp ASP.NET, bạn có thể sử dụng các tính năng của ASP.NET như Forms Authentication, Membership và Login controls để cung cấp một quá trình xác nhận hoàn chỉnh trong toàn ứng dụng. Bạn có thể làm việc này trong vài phút và không phải viết một dòng mã nào cả!

Tính năng URL Authorization mới, tương tự như tính năng URL Authorization của ASP.NET, dùng để cấu hình các quy tắc truy cập cho toàn bộ ứng dụng. Qui tắc truy cập cho phép/từ chối truy cập tới các địa chỉ URL trong ứng dụng dựa theo tên và quyền hạn của người dùng. URL Authorization tích hợp một cách trong suốt với tính năng Membership và Role Management của ASP.NET 2.0, và có thể dùng một cách hiệu quả với Forms Authentication và Login controls của ASP.NET để nhanh chóng thiết lập an ninh từ phía người dùng trong ứng dụng của bạn.

Tính năng lọc request mới cung cấp cho bạn chức năng khóa mạnh mẽ, một phần của nó chính là công cụ URLScan. Bạn có thể dùng tính năng này để bảo vệ site của mình chặt chẽ hơn bằng cách từ chối các request chứa các dữ liệu đáng nghi, bảo vệ tài nguyên nhạy cảm hay giới hạn request tấn công.

IIS 7.0 cũng cung cấp một số thay đổi giúp cho việc triển khai và quản lý các thiết lập an ninh dễ dàng hơn. Đáng chú ý là tài khoản IIS_IUSR và nhóm tài khoản IIS_IUSRS mới. Là một tài khoản built-in (có sẵn), IIS_IUSR không bị hạn chế bởi việc hết hạn password, cũng như phải đồng bộ password giữa các máy với nhau. Dùng để thay thế nhóm tài khoản IIS_WPG trước đây, IIS_IUSRS tự động thêm vào quá trình nhận diện thành viên trong lúc chạy, giúp giảm việc nhận diện thủ công vào trong nhóm khi sử dụng các tài khoản tùy chọn.

Tăng cường chẩn đoán

Với một máy chủ phức tạp như IIS, việc xác định lỗi nằm ở đâu là một công việc khó khăn và tốn nhiều thời gian. May mắn là IIS 7.0 đã đưa ra những công cụ mới hỗ trợ giám sát hoạt động của máy chủ cũng như gỡ rối ứng dụng.

Một trong những tính năng đáng chú ý là Runtime State and Control API (RSCA) cho phép bạn xem xét trạng thái hoạt động của các trang và các ứng dụng, các tiến trình đang chạy, thậm chí cả các request hiện đang được xử lý trên máy chủ. Nó cũng cho phép bạn điều khiển trạng thái của máy chủ, như khởi động/dừng các site, hoặc thu hồi bộ nhớ từ các ứng dụng. Trong Windows Vista, bạn có thể truy cập thông tin này thông qua công cụ appcmd.exe (dạng dòng lệnh), hoặc lập trình sử dụng các hàm API của Microsoft.Web.Administration. Với khả năng cung cấp thông tin chi tiết về những gì đang xảy ra, RSCA rất thuận tiện khi bạn tiến hành chẩn đoán hoặc tối ưu máy chủ.

Khi có lỗi trong ứng dụng web, nguyên nhân có thể là thiết lập máy chủ sai, lỗi ứng dụng, hoặc do các yếu tố môi trường khác. IIS 7.0 cung cấp thông tin chi tiết cho hầu hết các lỗi, báo cho bạn biết chính xác điều gì sai, tại sao và gợi ý cách để sửa chúng. Chi tiết về lỗi mà IIS 7.0 cung cấp tương tự như của ASP.NET. Theo mặc định, bạn chỉ nhận được thông tin chi tiết khi truy cập website từ máy cục bộ. Giống như trước đây, bạn có thể cấu hình thông tin trang báo lỗi cho mỗi mã lỗi hoặc chuyển sang một URL khác. Trang lỗi chi tiết cũng có thể địa phương hóa, cung cấp mô tả lỗi dựa trên ngôn ngữ của client.

Tăng cường quản lý

IIS 7.0 cung cấp một tập hợp phong phú các chức năng quản trị giúp việc quản lý máy chủ trở nên thuận tiện trong nhiều tình huống khác nhau. Công cụ quản lý IIS Manager mới dạng đồ hoạ, thay thế cho InetMgr.exe trước đây, giúp việc quản trị máy chủ trở nên rất đơn giản với giao diện dựa trên các công việc cụ thể.

IIS Manager cho phép bạn quản lý phần lớn tính năng của IIS 7.0 cũng như theo dõi hoạt động của máy chủ. Công cụ này hỗ trợ quản trị từ xa thông qua kết nối HTTP/SSL, với tùy chọn hỗ trợ cho cả việc xác thực dựa trên Windows và các cách xác thực khác.

Ngoài ra, IIS Manager cho phép ủy quyền quản lý, tức là cho phép chủ ứng dụng quản lý ứng dụng của họ từ xa mà không phải truy cập với quyền quản trị trên máy chủ. Cùng với khả năng này, người dùng của dịch vụ host có thể chạy công cụ quản trị trên desktop và kết nối từ xa để quản lý ứng dụng trên máy chủ host. Tất nhiên, các nhà quản trị máy chủ có toàn quyền quyết định tính năng quản lý nào được ủy quyền cho chủ ứng dụng.

Công cụ quản trị rất mềm dẻo, xây dựng trên một hệ thống cấu hình có thể mở rộng, cho phép thêm các giao diện quản lý tùy chọn vào công cụ. Bạn có thể tìm hiểu thêm về công cụ quản lý IIS Manager và cách thêm plug-in quản trị của chính bạn tại địa chỉ iis.net/default.aspx?tabid=7&subtabid=73

Nếu cần công cụ quản lý mềm dẻo hơn nữa, IIS 7.0 cung cấp công cụ dạng dòng lệnh appcmd.exe. Công cụ này tập hợp đầy đủ các chức năng quản lý và hỗ trợ cho các thao tác hàng loạt tốt hơn giao diện đồ hoạ, giúp đơn giản hoá việc đọc/ghi cấu hình, truy cập site và thông tin trạng thái về các ứng dụng, đồng thời thực hiện gần như bất kì công việc quản lý nào khác, tất cả thông qua dòng lệnh.

Chuẩn đoán lỗi mà không phải gỡ rối

Đối với nhà quản trị, lỗi thuộc dạng "Unknown" (không biết), hoặc lỗi gây ra trong quá trình tương tác của các thành phần máy chủ web thật sự là một thảm hoạ. Để giải quyết vấn đề đau đầu đó, IIS 7.0 cung cấp một cơ cấu dò vết (tracing) toàn diện, cung cấp thông tin chi tiết về mỗi request, giúp xác định vấn đề một cách nhanh chóng.

IIS 7.0 bổ sung các sự kiện chứa nhiều thông tin lên Event Tracing for Windows (ETW), vốn đã được thêm vào Windows Server 2003 SP1. Các sự kiện này chứa các thông tin hữu ích về mỗi giai đoạn trong quá trình xử lý của máy chủ, có thể kiểm tra để dò vết thông qua việc thực thi các request và xác định chính xác chỗ bị lỗi. Các sự kiện này cũng có thể được gửi tới cơ cấu dò vết của Windows, cho phép nhiều thành phần khác, như ASP.NET và SQL Server, liên kết các thông tin tracing của chúng thành một khối thông tin thống nhất và chi tiết về mỗi request. Chúng cũng có thể được gửi đến tính năng Failed Request Tracing mới (được gọi là FREB), lưu lại trace log dưới dạng XML.

Điều thú vị nhất về Failed Request Tracing là bạn có thể bật nó lên với các request gây lỗi hoặc cần nhiều thời gian xử lý hơn bình thường. Với Failed Request Tracing, bạn luôn có thể nhận được các thông tin dò vết đáng giá khi lỗi xảy ra, ngay cả khi lỗi không liên tục hay khó lặp lại. Khả năng này giúp chẩn đoán và sửa các lỗi mà trước đây cần debug đầy đủ mới làm được.

Nền tảng của việc dò vết được đặt vào các module của IIS thông qua mô hình mở rộng máy chủ, cho phép tất cả các thành phần máy chủ, bất kể chúng được phân phối cùng với IIS hay là được phát triển bởi bên thứ 3, tạo ra các thông tin dò vết chi tiết trong quá trình xử lý request. Việc dò vết của IIS 7.0 tích hợp với ASP.NET thông qua System.Diagnostics và cơ cấu dò vết của ASP.NET, cho phép các module được quản lý sử dụng một mẫu dò vết thống nhất. Xa hơn, bạn có thể viết module để xử lý và xuất thông tin dò vết theo cách của bạn.

Tăng cường tốc độ

Phiên bản IIS 7.0 trên Windows Vista chỉ cho phép xử lý tối đa 10 request cùng lúc. Tuy nhiên, ngay cả phiên bản này, người ta đã thấy có những thay đổi ấn tượng về mặt tốc độ, chứng tỏ đã có những thay đổi quan trọng ở cấu trúc bên trong. Người ta đang trông chờ vào hiệu năng thật sự mà IIS 7.0 trên nền Windows Longhorn Server mang lại.

Trước hết do cấu trúc module hoá của máy chủ. Cấu trúc này cho phép nhà quản trị loại bỏ các thành phần không cần thiết, nhờ đó tiết kiệm được RAM và thời gian CPU mỗi khi xử lý các request. Điều này làm tăng tốc độ đáng kể và khả năng xử lý của máy chủ. Xa hơn, việc cho phép/cấm một thành phần của máy chủ làm việc với mỗi ứng dụng sẽ tăng tốc độ của ứng dụng đó nhờ việc nó chỉ sử dụng những thành phần cần thiết cho mình.

Thứ hai, một thành phần đáng chú ý trong IIS 7.0 là IIS Output Cache mới, được đánh giá là nhanh hơn tính năng Cache trong ASP.NET. Mặc dù chỉ cung cấp một số chức năng, nhưng Output Cache vẫn đủ linh hoạt trong việc dùng lại các trang đã được xử lý, giúp mềm dẻo hóa việc xử lý trang web cũng như truy vấn cơ sở dữ liệu để trả về kết quả cho client. Việc sử dụng IIS Output Cache được trông đợi tăng tốc độ các trang ASP.NET, PHP hay ứng dụng CGI lên từ 5-10 lần, trong khi sử dụng ít tài nguyên hệ thống hơn.

Một vài chi tiết về IIS 7.0

IIS 7.0 chỉ có mặt trong các phiên bản Vista Home Premium, Business, và Ultimate, bản Home Basic sẽ không có thành phần này. Khi tiến hành nâng cấp từ các phiên bản trước, cần chú ý như bảng dưới

Phiên bản IIS 7.0 trên Windows Vista sử dụng cùng nhân với phiên bản trên Longhorn Server, và khi phiên bản trên Longhorn hoàn tất, người dùng Vista cũng có thể sử dụng đầy đủ các tính năng của một máy chủ thực sự thông qua một gói dịch vụ (service pack) cho Vista, giúp các nhà phát triển có thể xây dựng và chạy thử ứng dụng web một cách hoàn chỉnh ngay trên máy tính chạy Vista của mình.

Kết luận

Bài viết này hi vọng đem đến cho các bạn một cái nhìn tổng quan về IIS 7.0. Với những điều đã trình bày ở trên, IIS 7.0 thật sự đáng giá, đúng như tuyên bố của Microsoft về một kiến trúc nền tảng cho máy chủ web thế hệ tiếp theo. Đối với các nhà phát triển, IIS 7.0 là một trong những lý do thuyết phục để họ nâng cấp lên Vista/Longhorn Server. Còn người dùng sẽ được lợi với những ứng dụng/dịch vụ web nhanh, an toàn và sẵn sàng hơn.