Trong phần này, chúng ta sẽ có một cái nhìn những tính năng trong IIS 6.0, tên Application Pool, và chứng minh việc sử dụng Application Pool trong việc cô lập các ứng dụng web ASP.NET, do đó làm tăng độ tin cậy của các ứng dụng web ASP.NET. Sau đó, chúng ta sẽ tìm hiểu cách thức Application Pool ảnh hưởng đến các ứng dụng ASP.NET trong các điều khoản của danh tính được sử dụng để chạy ứng dụng ASP.NET. Cách khác, chúng ta cũng sẽ xem xét các bước tạo ra Application Pool và các ứng dụng giao ASP.NET để chạy theo Application Pool cụ thể. Cuối cùng, tôi sẽ minh họa cách cấu hình Application Pool chạy bằng cách sử dụng thông tin của tài khoản người dùng cụ thể.
Application Pool là gì?
Application Pool có thể chứa một hoặc nhiều ứng dụng và cho phép chúng ta cấu hình cấp độ giữa các ứng dụng web khác nhau. Ví dụ, nếu bạn muốn cô lập tất cả các ứng dụng web chạy trong cùng một máy, bạn có thể làm điều này bằng cách tạo ra Application Pool riêng biệt cho mỗi ứng dụng web và đặt chúng trong Application Pool tương ứng. Bởi vì mỗi Application Pool chạy trong quá trình làm việc riêng của mình, các lỗi trong Application Pool sẽ không ảnh hưởng đến các ứng dụng đang chạy trong Application Pool khác. Triển khai ứng dụng trong Application Pool là lợi thế chính của IIS 6.0 trong quá trình làm việc ở chế độ cách ly bởi vì bạn có thể tùy chỉnh Application Pool để đạt được cấp độ tách biệt ứng dụng mà bạn cần.
Khi bạn cấu hình Application Pool để sẵn sàng tối ưu, bạn cũng nên xem xét làm thế nào để cấu hình Application Pool bảo mật ứng dụng. Ví dụ, bạn có thể cần phải tạo ra Application Pool riêng cho ứng dụng đòi hỏi mức độ bảo mật cao, trong khi cho phép các ứng dụng đòi hỏi một mức độ thấp hơn của bảo mật để chia sẻ cùng Application Pool. Trong phần sau của bài viết này, tôi sẽ xem làm thế nào để cấu hình danh tính ở cấp Application Pool.
Tạo Application Pool mới
Tạo Application Pool mới rất đơn giản được thực hiện bằng cách sử dụng trình quản lý IIS. Khi bạn tạo ra Application Pool mới, bạn có hai lựa chọn sau:
1. Bạn có thể tạo Application Pool mới từ đầu hoặc
2. Bạn có thể tạo Application Pool mới bằng cách nhập các thiết lập cấu hình từ file XML bên ngoài
Để tạo Application Pool mới từ đầu, nhấp chuột phải vào nút Application Pools từ danh sách, và chọn New-> Application Pool từ menu ngữ cảnh. Bạn sẽ thấy màn hình sau đây, nơi bạn cần phải nhập tên cho Application Pool.
Khi tạo ứng dụng mới, bạn cũng có tùy chọn kế thừa các thiết lập từ Application Pool hiện có. Ví dụ, nếu bạn muốn Application Pool mới để kế thừa các thiết lập từ DefaultAppPool, bạn có thể làm điều đó bằng cách chọn tùy chọn sử dụng Application Pool hiện tại như màn hình ở trên. Sau khi chọn tùy chọn này, Application Poolthả xuống sẽ được kích hoạt chọn Application Pool hiện có.
Sau khi pool được tạo ra, bạn có thể lưu các thiết lập của ứng dụng thành file XML bên ngoài bất cứ lúc nào bằng cách kích chuột phải vào Application Pool và chọn tùy chọn All Tasks-> Save Configuration đến tập tin có sẵn từ menu ngữ cảnh. Đây là tính năng cực kỳ hữu íchcó thể cho bạn dễ dàng tạo cùng Application Pool trên cùng một máy chủ hoặc trên máy chủ khác.
Cấu hình nhận dạng ứng dụng web ASP.NET
Trong các phiên bản trước của IIS, quá trình chạy như LocalSystem, tài khoản có quyền quản trị hệ thống trên máy chủ. Vì LocalSystem có quyền truy cập vào gần như tất cả các tài nguyên trên hệ điều hành, điều này gây ra ảnh hưởng an ninh. Như đã đề cập trước đây, trong IIS 6.0, bạn có thể thiết lập danh tính của quá trình làm việc ở cấp Application Pool. Danh tính của Application Pool là tài khoản mà theo đó quá trình Application Pool chạy. Theo mặc định, Application Pool hoạt động theo tài khoản NetworkService, trong đó có quyền truy cập người dùng ở mức độ thấp. Tài khoản NetworkService có bảy đặc quyền sau đây:
- Điều chỉnh chỉ tiêu bộ nhớ cho tiến trình
- Tạo ra kiểm tra an ninh
- Đăng nhập như dịch vụ
- Thay thế quy trình cấp mã thông báo
- Mạo danh khách sau khi xác thực
- Cho phép đăng nhập tại local
- Truy cập vào máy tính này từ mạng
Bằng cách chạy quá trình sử dụng tài khoản rất thấp có đặc quyền NetworkService, bạn có thể giảm lỗ hổng bảo mật. Tuy nhiên, bằng cách sử dụng quản lý IIS, bạn có thể cấu hình Application Pool chạy như bất kỳ của các tài khoản được xác định như sau:
- NetworkService
- LocalSystem
- LocalService
Để cấu hình nhận dạng cho Application Pool, bấm chuột phải vào Application Pool và chọn Thuộc tính từ menu ngữ cảnh. Trong hộp thoại Thuộc tính, chọn tab Identity và bạn sẽ thấy màn hình sau.
Trong hộp thoại ở trên, khi bạn chọn tùy chọn Predefined, bạn có thể chọn bất kỳ các tài khoản được xác định trước từ danh sách thả xuống. Thay vì sử dụng tài khoản được xác định trước, nếu bạn muốn Application Pool của bạn chạy theo tài khoản khác, chọn tùy chọn Configurable và sau đó thiết lập User và Password. Cách tiếp cận này đặc biệt hữu ích khi bạn đang chạy nhiều ứng dụng hoặc các trang web trên một máy chủ Web. Ví dụ, nếu một Host ISP hai công ty, những người này có thể là đối thủ cạnh tranh, trên máy chủ Web, nó phải đảm bảo rằng hai ứng dụng chạy cô lập. Quan trọng hơn, các ISP có để đảm bảo rằng quản trị viên tiềm tàng của ứng dụng nào đó không thể truy cập dữ liệu của ứng dụng khác.
Cấu hình danh tính cho Application Pool
Để chứng minh làm thế nào để cấu hình danh tính cho Application Pool và làm thế nào ASP.NET sử dụng thông tin danh tính tại thời gian thực hiện, chúng ta sẽ tạo ra một ứng dụng ASP.NET rất đơn giản. Chúng ta sẽ bắt đầu bằng cách tạo ra một ứng dụng ASP.NET mới có tên IdentityExample bằng cách sử dụng hộp thoại New Project trong Visual Studio.NET. Sau khi dự án được tạo ra, nếu bạn mở trình quản lý IIS, bạn sẽ thấy dự án IdentityExample được tạo ra trong Application Pool mặc định tên là DefaultAppPool .
Bây giờ, chúng ta hãy thêm những dòng mã sau vào sự kiện Page_Load mặc định trên Form Web WebForm1.aspx.
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write(
"ASP.NET application executes using the
identity :: <b>" +
WindowsIdentity.GetCurrent().Name +
"</b><br>");
}
Đoạn mã trên, đơn giản tôi chỉ cho hiển thị tên của tài khoản mà ứng dụng web ASP.NET sử dụng để xử lý các dịch vụ. Nếu bạn thực thi mã bằng cách điều hướng đến các trang từ trình duyệt, bạn sẽ thấy kết quả như sau.
Đầu ra ở trên chỉ củng cố thực tế là, theo mặc định, các ứng dụng web chạy bằng cách sử dụng tài khoản NetworkService. Tôi sẽ thay đổi danh tính của DefaultAppPool và sau đó nhìn vào đầu ra của ứng dụng Web. Để làm điều này, kích chuột phải vào nút DefaultAppPool từ trình quản lý IIS và chọn Properties từ menu ngữ cảnh. Trong hộp thoại Properties, điều hướng đến tab Identity và chọn tùy chọn Configurable và chỉ định tên người dùng và mật khẩu hợp lệ. Khi đã có, màn hình sẽ giống như sau.
Bây giờ, nếu bạn thực hiện ứng dụng, bạn sẽ thấy kết quả như sau.
Theo dự kiến, đầu ra phản ánh sự thay đổi mà tôi đã thực hiện bằng cách sử dụng trình quản lý IIS.
Kết hợp ứng dụng web ASP.NET với Application Pool
Tạo dự án mới Visual Studio.NET tên IISIntegration bằng cách sử dụng hộp thoại New Project như trong ảnh chụp màn hình sau đây.
Sau khi tạo dự án mới, nếu bạn mở IIS Manager, bạn sẽ thấy dự án IISIntegration được tạo ra dưới Application Pool có tên DefaultAppPool. Như tên cho thấy, theo mặc định, tất cả các ứng dụng web ASP.NET mới được tạo ra dưới Application Pool này. Điều này được thể hiện trong ảnh chụp màn hình sau đây.
Liên kết ứng dụng Web ASP.NET IISIntegration với Application Pool có tên DemoAppPool , chọn nút Websites hiện tại dưới nút Machine Name trong trình quản lý IIS. Sau đó, chọn Default Web Site-& IISIntegration từ TreeView và kích chuột phải vào nó để chọn Properties từ menu ngữ cảnh.
Trong hộp thoại Properties hiển thị ở trên, bạn có thể thay đổi Application Pool bằng cách sử dụng lựa chọn danh sách thả xuống Application Pool trong mục tab. Tôi muốn ứng dụng web của tôi chạy DemoAppPool, chọn DemoAppPool từ danh sách.
Recycling Worker Processes và ảnh hưởng của chúng trên Thông tin Application State
Nếu ứng dụng web có chứa mã gây vấn đề, và bạn không dễ dàng viết lại mã, nó có thể hữu ích để hạn chế mức độ vấn đề bằng cách định kỳ tái chế các quá trình là dịch vụ ứng dụng. Bạn có thể thực hiện điều này bằng cách sử dụng Recycling Worker Processes. Recycling Worker Processes thay thế instance application trong bộ nhớ. IIS 6.0 có thể tự động Recycling Worker Processes bằng cách khởi động quá trình làm việc, đã được giao Application Pool. Điều này giúp giữ cho ứng dụng có vấn đề chạy trơn tru, và vấn đề giảm thiểu rò rỉ bộ nhớ. Bạn có thể kích hoạt việc Recycling Worker Processes giao cho Application Pool bằng cách sử dụng các phương pháp Recycling Worker Processes được dựa trên thời gian mất, số lượng yêu cầu Hypertext Transfer Protocol (HTTP), thời gian thiết lập trong ngày, và hai loại tiêu thụ bộ nhớ, ngoài việc tái chế theo yêu cầu.
Để cấu hình tất cả các thiết lập ở trên, đi đến cửa sổ Properties của application pool trong ứng dụng web đang chạy bằng cách sử dụng trình quản lý IIS. Bằng cách sử dụng các Tab Recycling, Performance, và Health trong cửa sổ Properties, bạn có thể chỉ định giá trị cho các thiết lập ở trên. Điều hướng đến tab Performance trong hộp thoại Properties của DemoAppPool, kết quả sau:
Khi bạn thiết lập việc tái chế của quá trình làm việc sử dụng trình quản lý IIS, cần phải có chiến lược quản lý trạng thái của ứng dụng ASP.NET. Vì mỗi khi quá trình làm việc được tái lập, các thông tin trạng thái ASP.NET sẽ bị mất khiến các ứng dụng trong trạng thái không hợp lệ. Một thay thế để khắc phục vấn đề này là duy trì dữ liệu trạng thái bên ngoài đến tiến trình làm việc, chẳng hạn như trong cơ sở dữ liệu. Tuy nhiên, di chuyển dữ liệu vào cơ sở dữ liệu bên ngoài cho phép tái lập có thể ảnh hưởng đến hiệu suất máy chủ trong hai cách sau đây:
- Hiệu suất bị giảm do việc quản lý dữ liệu thêm vào đó là cần thiết để di chuyển dữ liệu giữa các ứng dụng và cơ sở dữ liệu.
- Tái lập bất kỳ trong quá trình lưu trữ dữ liệu, do đó lưu trữ cần phải được xây dựng lại.
Nếu bạn có application pool với các ứng dụng phụ thuộc vào dữ liệu trạng thái, bạn phải quyết định có hay không để tái lập các tiến trình làm việc đã được giao cho application pool. Nếu bạn lưu trữ trạng thái trong tiến trình tương tự như của IIS, và bạn không muốn thông tin trạng thái bị mất, bạn không phải tái lập tiến trình làm việc bằng cách sử dụng các thiết lập cấu hình application pool.