وبسرورها یکی از ارکان اصلی زیرساخت فناوری اطلاعات سازمانها محسوب میشوند و نقش کلیدی در ارائه سرویسهای آنلاین، برنامههای تحت وب و خدمات سازمانی دارند. در میان گزینههای موجود، IIS (Internet Information Services) به عنوان وبسرور رسمی مایکروسافت، جایگاهی ویژه در محیطهای ویندوزی دارد و به دلیل یکپارچگی با اکوسیستم مایکروسافت، مدیریت آسان، امنیت بالا و قابلیت مقیاسپذیری، انتخاب اول بسیاری از مدیران فناوری اطلاعات و متخصصان شبکه محسوب میشود. آشنایی با IIS چیست، نحوه نصب IIS، تنظیمات IIS و مدیریت آن در ویندوز سرور، ضرورتی حرفهای به شمار میآید. این راهنما با تمرکز بر آموزش گامبهگام و جامع آموزش IIS، از مفاهیم پایه تا پیکربندیهای پیشرفته، طراحی شده تا به مدیران فناوری اطلاعات کمک کند ضمن انتخاب و پیکربندی صحیح وبسرور، از سرویس IIS بهترین بهره را ببرند. همچنین در این آموزش به چالشهای واقعی این گروه مانند انتخاب سختافزار مناسب (بهویژه سرور HP)، اطمینان از اصالت محصولات و دریافت مشاوره تخصصی پیش از خرید نیز پرداخته میشود تا یک نقشه راه کامل برای راهاندازی، مدیریت و نگهداری IIS در اختیارشان باشد.
سرویس IIS در ویندوز سرور چیست
Internet Information Services (IIS) یا همان «خدمات اطلاعات اینترنتی» وبسرور رسمی مایکروسافت است که بهطور پیشفرض در نسخههای مختلف ویندوز سرور ارائه میشود و بستری امن، پایدار و انعطافپذیر برای میزبانی وبسایتها و برنامههای تحت وب فراهم میکند. این وبسرور با یکپارچگی کامل در اکوسیستم مایکروسافت، از فناوریهای مدرن مانند ASP.NET Core، PHP، FastCGI، HTTP/2 و حتی FTP پشتیبانی میکند و در سازمانها و محیطهای Enterprise بهعنوان یک راهکار استاندارد شناخته میشود. در واقع IIS چیست را میتوان اینگونه تعریف کرد: یک پلتفرم مقیاسپذیر و قابل تنظیم برای انتشار و مدیریت سرویسهای تحت وب که به مدیران IT امکان میدهد سایتهای متعدد را با امنیت و عملکرد بالا میزبانی کنند. شناخت ساختار و معماری سرویس IIS شامل ماژولهای کاربردی، Application Poolها و سیستم مدیریت پیکربندی (Config System) اولین گام برای راهاندازی صحیح این وبسرور محسوب میشود.
| ویژگیها / نسخهها | IIS در ویندوز سرور (Full) | IIS Express (سبک) |
|---|---|---|
| هدف اصلی | میزبانی وبسایتها و برنامههای سازمانی در محیط Production | توسعه و تست محلی در محیط Development |
| نصب و مدیریت | نصب بهعنوان یک Role در Windows Server و مدیریت از طریق Server Manager، PowerShell و AppCmd | نصب سبک بدون نیاز به دسترسی ادمین و مدیریت از طریق Visual Studio یا خط فرمان |
| قابلیتهای امنیتی | پیشرفته: SSL/TLS، احراز هویت ویندوز، Dynamic IP Restrictions، Logging Enterprise | محدودتر و مناسب تست، بدون امکانات کامل امنیتی |
| پشتیبانی از چندین سایت | بله، چندین سایت با Application Pool جداگانه | محدود به تست تکسایت یا چندسایت کوچک |
| کارایی و مقیاسپذیری | بالا، مناسب برای سازمانها و دیتاسنترها | پایینتر، مناسب لپتاپ/توسعهدهندهها |
| سازگاری با ماژولها | پشتیبانی کامل از ماژولها و افزونههای IIS | سازگاری با اکثر ماژولها اما با محدودیت |
| یکپارچگی با HP Servers | بله، توصیهشده برای سرورهای HP با RAID و معماری Enterprise | معمولاً روی سیستمهای توسعه اجرا میشود |
تفاوت IIS در ویندوز کلاینت و ویندوز سرور
درک صحیح تفاوتهای IIS در ویندوز سرور با نسخههای کلاینتی یا سبکتر مانند IIS Express نیز اهمیت ویژهای دارد. IIS Express چیست؟ این نسخه در واقع نمونهای سبکتر و قابل حمل از IIS کامل است که برای توسعهدهندگان و تست محلی طراحی شده و تمامی قابلیتهای کلیدی IIS را در یک بسته کوچک و بدون نیاز به دسترسی ادمین ارائه میدهد. در مقابل، نسخه کامل IIS در Windows Server امکانات Enterprise مانند مدیریت Application Poolهای متعدد، امنیت پیشرفته، پشتیبانی از Load Balancing و Web Farm را فراهم میکند. مدیران فناوری اطلاعات با شناخت این تفاوتها میتوانند برای سناریوهای مختلف — از توسعه تا محیطهای Production — تصمیمگیری درستی داشته باشند. جدول زیر یک مرور سریع و کاربردی بر ویژگیهای اصلی IIS و تفاوتهای نسخههای آن ارائه میدهد:
بیشتر بخوانید: آموزش کانفیگ NPS در ویندوز سرور: عیب یابی خطاهای NPS، مانیتورینگ و امنیت
پیشنیازها و انتخاب سرور مناسب برای نصب IIS
پیش از نصب و پیکربندی IIS در ویندوز سرور، مدیران فناوری اطلاعات باید با پیشنیازهای نرمافزاری و سختافزاری این وبسرور آشنا شوند تا بتوانند بهترین عملکرد را از آن دریافت کنند. در حوزه نرمافزار، اطمینان از نصب نسخه مناسب Windows Server (مثل 2019 یا 2022) و بهروزرسانی آن با آخرین Patchها اهمیت ویژهای دارد. همچنین باید نقش (Role) و قابلیتهای مرتبط مثل Web Server (IIS)، ASP.NET، FTP Server یا HTTP/2 از طریق Server Manager یا PowerShell اضافه شوند. در حوزه سختافزار نیز ظرفیت منابعی مانند CPU، RAM و Storage تعیینکننده تعداد سایتها و برنامههایی است که میتوانید روی یک سرور میزبانی کنید. یک وبسرور ناپایدار یا ضعیف میتواند کل سرویس سازمان را تحت تأثیر قرار دهد؛ بنابراین انتخاب سختافزار مناسب به اندازه پیکربندی نرمافزاری اهمیت دارد.
در میان گزینههای سختافزاری، سرورهای HP به دلیل پایداری، امنیت سختافزاری، معماری پیشرفته و خدمات پس از فروش گسترده، انتخابی محبوب برای سازمانهای متوسط و بزرگ هستند. اما همین تنوع بالای مدلها و کانفیگها میتواند انتخاب را دشوار کند. برای مثال در پروژههای کوچک یا متوسط، استفاده از مدلهای HP ProLiant با منابع استاندارد کافی است، در حالی که برای سازمانهای Enterprise یا بارهای کاری بالا باید به سراغ مدلهای نسل جدید با پشتیبانی از RAID سختافزاری، پردازندههای چندهستهای پرقدرت و حافظه RAM بالاتر بروید. همچنین توجه به اصالت محصول، گارانتی معتبر و امکان تأمین قطعات یدکی در آینده، بخشی حیاتی از تصمیمگیری برای خرید سرور فیزیکی است. جدول زیر مروری سریع بر پیشنیازهای اصلی نرمافزاری و سختافزاری IIS و همچنین نکات انتخاب سرور HP ارائه میدهد:
| نوع پیشنیاز | جزئیات اصلی | نکات کلیدی برای مدیران IT |
|---|---|---|
| سیستمعامل | Windows Server 2019 / 2022 با آخرین بهروزرسانیها | نصب Roleهای Web Server و Featureهای لازم مثل .NET، FTP |
| پردازنده (CPU) | چندهستهای، ترجیحاً Xeon در سرورهای HP | پشتیبانی از بارهای کاری همزمان، بهینه برای Application Poolها |
| حافظه RAM | حداقل 8GB برای سایتهای کوچک، 32GB یا بیشتر برای سازمانی | مدیریت بهینه Cache، افزایش سرعت پاسخگویی |
| ذخیرهسازی (Storage) | SSD یا RAID سختافزاری در سرورهای HP | تضمین سرعت و پایداری، کاهش Downtime |
| شبکه (Network) | کارت شبکه گیگابیتی یا 10GbE | عملکرد پایدار برای ترافیک بالا |
| گارانتی و پشتیبانی | گارانتی معتبر و تأمین قطعات یدکی | کاهش ریسک خرابی و زمان توقف سرویس |
| بودجهبندی | تطبیق منابع با نیاز واقعی سازمان | جلوگیری از هزینه اضافی یا کمبود منابع در آینده |
نصب IIS در ویندوز سرور
نصب IIS در ویندوز سرور بهعنوان نقش (Role) وبسرور یکی از اولین گامها برای راهاندازی سرویسهای تحت وب در سازمان است. مدیران فناوری اطلاعات که تجربه مدیریت زیرساخت دارند، میدانند که اگر نصب و پیکربندی اولیه به درستی انجام شود، امنیت و پایداری سرویس در بلندمدت تضمین خواهد شد. نصب IIS میتواند از دو مسیر انجام شود: رابط گرافیکی Server Manager یا خط فرمان (PowerShell). در روش گرافیکی، از طریق Server Manager، نقش Web Server (IIS) را انتخاب و نصب میکنید و میتوانید ماژولهای اضافی مانند FTP Server، ASP.NET، HTTP Logging، Request Filtering را نیز همزمان اضافه کنید. در روش PowerShell، با دستورات سادهای مثل Install-WindowsFeature -name Web-Server -IncludeManagementTools میتوانید به سرعت IIS را نصب کنید و کنترل دقیقتری روی ماژولها داشته باشید. پس از نصب، با مراجعه به مرورگر سرور و وارد کردن آدرس http://localhost باید صفحه پیشفرض IIS را مشاهده کنید که نشانه نصب موفقیتآمیز است.
نصب IIS Express در مقابل بسیار سادهتر است و نیازی به نقش (Role) در ویندوز سرور ندارد؛ این نسخه برای توسعهدهندگان طراحی شده و میتواند روی سیستمهای کلاینت یا حتی لپتاپ اجرا شود. اما برای مدیران فناوری اطلاعات که قصد راهاندازی سرویسهای Production دارند، نسخه کامل IIS روی ویندوز سرور تنها گزینه حرفهای و ایمن است. در هنگام نصب بهتر است ماژولهای غیرضروری فعال نشوند تا سطح حمله (Attack Surface) کاهش یابد. همچنین پیش از ورود به محیط Production، توصیه میشود Patchها و بهروزرسانیهای امنیتی ویندوز و IIS نصب شوند.
| روش نصب / نوع IIS | مسیر نصب و ابزارها | مزایا | مناسب برای |
|---|---|---|---|
| IIS کامل (Web Server Role) | Server Manager → Add Roles and Features یا PowerShell (Install-WindowsFeature) | کنترل کامل روی ماژولها، امنیت بالا، قابلیت مدیریت Enterprise | مدیران IT، محیط Production |
| IIS Express | نصب مستقیم از Microsoft Download Center | سبک، بدون نیاز به دسترسی ادمین، نصب سریع | توسعهدهندگان، محیط Development |
| PowerShell (خودکارسازی) | دستورات Install-WindowsFeature و AppCmd |
سرعت بالا، امکان اسکریپتنویسی و اتوماسیون | محیطهای بزرگ با سرورهای متعدد |
پیکربندی اولیه IIS (تنظیمات IIS)
پس از نصب IIS در ویندوز سرور، مرحله بعدی انجام تنظیمات IIS است که نقش کلیدی در عملکرد، امنیت و انعطافپذیری وبسرور ایفا میکند. در این مرحله، مدیران IT ابتدا باید ساختار سایتها و برنامههای خود را در کنسول IIS Manager تعریف کنند. ایجاد یک سایت جدید شامل تعیین Physical Path (مسیر فیزیکی فایلها)، انتخاب پورت و Binding (نام میزبان و SSL) و تعیین سطح دسترسی مناسب است. بهطور معمول در سناریوهای سازمانی توصیه میشود هر سایت یا برنامه در یک Application Pool مجزا اجرا شود تا اگر یک برنامه دچار مشکل شد، روی سایر برنامهها اثر نگذارد. تنظیمات Application Pool مثل Identity (هویت اجرای برنامه)، Recycling (بازیابی دورهای)، و Idle Timeout نقش مهمی در مدیریت منابع و امنیت دارد. همچنین مدیران میتوانند از بخش Default Document برای مشخص کردن فایل پیشفرض سایت استفاده کنند یا امکان Directory Browsing را برای افزایش امنیت غیرفعال کنند.
مدیران فناوری اطلاعات باتجربه میدانند که در همین پیکربندی اولیه باید به بهینهسازی و ایمنسازی IIS هم توجه شود. فعال کردن SSL/TLS برای سایتها، محدودسازی IP و Request Filtering (محدودسازی نوع و حجم درخواستها) از اقداماتی است که سطح امنیت را بالا میبرد. علاوه بر این، Caching (کشینگ خروجی) و Compression (فشردهسازی) برای افزایش سرعت بارگذاری سایت و کاهش مصرف پهنای باند حیاتی هستند. در صورت نیاز به مدیریت ماژولها و افزونهها، مدیر میتواند از بخش Modules در IIS Manager یا ابزار خط فرمان AppCmd استفاده کند تا ماژولهای غیرضروری را حذف و فقط موارد ضروری را فعال کند. جدول زیر نمای کلی از مهمترین تنظیمات اولیه IIS و تأثیر آنها بر عملکرد و امنیت وبسرور ارائه میدهد:
| تنظیمات کلیدی IIS | توضیحات کاربردی | تأثیر اصلی بر سرویس |
|---|---|---|
| ایجاد سایت جدید (Add Website) | تعریف مسیر فیزیکی، پورت، Binding (نام میزبان و SSL) | راهاندازی سریع و منظم سایتها |
| Application Pool | اجرای هر برنامه در محیط جداگانه با Identity و Recycling | افزایش امنیت و جلوگیری از Crashهای زنجیرهای |
| Default Document / Directory Browsing | تعیین فایل پیشفرض و غیرفعال کردن لیست دایرکتوریها | بهبود امنیت و تجربه کاربر |
| SSL/TLS و Binding امن | افزودن گواهی امنیتی و فعال کردن HTTPS | رمزنگاری دادهها، افزایش اعتماد کاربران |
| Request Filtering | محدودسازی نوع، طول و حجم درخواستها | کاهش سطح حمله و جلوگیری از سوءاستفاده |
| Caching و Compression | فعال کردن کشینگ خروجی و فشردهسازی محتوا | بهبود سرعت پاسخگویی و کاهش مصرف پهنای باند |
| Modules Management | مدیریت ماژولها و افزونههای IIS | بهینهسازی عملکرد و کاهش بار اضافی |
تنظیمات پیشرفته و مدیریت حرفهای IIS
در این بخش به مباحثی میپردازیم که برای یک مدیر فناوری اطلاعات در سطح حرفهای اهمیت دارند: راهاندازی Reverse Proxy، Load Balancing، URL Rewrite پیچیده، امنیت سطح بالاتر و یکپارچگی با زیرساختها. مباحث این بخش نه فقط برای وبسایتهای ساده، بلکه برای معماریهای بزرگتر و محیطهای توزیعی طراحی شدهاند.
۱. راهاندازی IIS بهعنوان Reverse Proxy با استفاده از ARR + URL Rewrite
یکی از روشهای پیشرفته مدیریت ترافیک، تبدیل IIS به Reverse Proxy است، یعنی IIS درخواستهای ورودی را دریافت کرده و آنها را به یکی از سرورهای پشتیبان یا لایههای میانی هدایت میکند. برای این کار معمولاً از ترکیب URL Rewrite و Application Request Routing (ARR) استفاده میشود. ARR به IIS امکان میدهد قوانین پیچیده مسیربندی بر اساس Header، کوکی، URL و متغیرهای سروری تعریف کند و بهعنوان یک پروکسی سطح اپلیکیشن (Layer 7) عمل کند.
مراحل کلی راهاندازی Reverse Proxy با ARR به شرح زیر است:
-
نصب URL Rewrite (ماژول پیشنیاز).
-
نصب ARR (که به URL Rewrite وابسته است)
-
در IIS Manager، در سطح سرور، به بخش Application Request Routing Cache بروید و گزینه “Enable Proxy” را فعال کنید.
-
در بخش سایت مورد نظر، وارد URL Rewrite شوید و یک قاعده Reverse Proxy بسازید که مسیر مقصد (Backend) مانند
http://localhost:5000یا یک سرور داخلی را هدف قرار دهد. -
تنظیم گزینههایی مانند preserveHostHeader تا هدر اصلی میزبان به سرور مقصد حفظ شود (برای برخی برنامهها لازم است).
-
در Web.config یا تنظیمات پیکربندی، ممکن است نیاز باشد محدودیتهایی مانند
maxAllowedContentLengthیاmaxUrlرا بزرگتر کنیم تا درخواستهای بزرگ عبور کنند.
نکته مهم: هنگام استفاده از ARR، پیکربندیهای Load Balancing، سلامت سرورها (Health Check) و Affinity (مثلاً بر اساس کوکی) قابل تنظیم هستند.
۲. راهاندازی Load Balancing — تعادل بار بین سرورها
ARR نه تنها بهعنوان Reverse Proxy عمل میکند، بلکه میتواند به عنوان یک Load Balancer نیز استفاده شود. با تعریف یک Server Farm (مزرعه سرور) و افزودن چند سرور اپلیکیشن به آن، ARR مسئول توزیع درخواستها بین آنها خواهد بود.
مراحل:
-
در IIS Manager → راستکلیک روی Server Farms → انتخاب Create Server Farm → افزودن سرورهای موردنظر.
-
تنظیم الگوریتم توزیع (مثل Round-Robin، Weighted Round-Robin، Least Requests، و غیره)
-
پیکربندی سلامت سرور (Health Monitoring) با تست URL خاص یا بررسی زنده ترافیک
-
زمانی که سروری Down باشد، ARR آن را از چرخه خارج کرده و درخواستها را به سرورهای سالم هدایت میکند
-
امکان فعال کردن Client Affinity (کوکی) تا درخواستهای یک کلاینت به یک سرور مشخص منتقل شود
۳. نوشتن قواعد پیچیده URL Rewrite
در محیطهای بزرگ، ممکن است نیاز باشد مسیرهای هوشمند، بازنویسی پویا یا ریدایرکتهای شروطی تعریف شود. مثلاً:
-
بازنویسی مسیری
/api/v2/(.*)به سرور داخلی متفاوت -
افزودن شرط بر اساس هدر یا پارامتر کوئری
-
انجام Outbound Rewrite برای اصلاح لینکهای بازگشتی
-
حذف یا تغییر بخشهایی از URL پس از پردازش
در این حالت، باید به دقت از Syntax ماژول URL Rewrite استفاده کنید و تستهای کامل انجام دهید تا مطمئن شوید قوانین با هم تداخل نمیکنند.
۴. امنیت پیشرفته و محدودسازی
در محیط تولید بزرگ، توجه به امنیت از اهمیت حیاتی برخوردار است:
-
محدود کردن دسترسی به مدیریت IIS (Remote Management) فقط از آدرسهای مجاز
-
استفاده از TLS 1.2/1.3، غیرفعالکردن پروتکلهای ناامن
-
فعال کردن Dynamic IP Restrictions برای جلوگیری از حملات Brute Force
-
استفاده از Request Filtering برای محدود کردن نوع محتوا، طول URL و حجم درخواست
-
بررسی و حذف ماژولهای غیرضروری برای کاهش سطح حمله
-
فعال کردن Logging پیشرفته و Failed Request Tracing برای تحلیل خطاها
-
پیکربندی تنظیمات امنیتی برای اجزاء Backend و ارتباط بین IIS به اپلیکیشن
۵. مانیتورینگ، تشخیص خطا و بهینهسازی
-
فعال کردن Failed Request Tracing (FRT) برای ثبت ریزخطاها و جزئیات درخواستها
-
استفاده از Performance Monitor، Counters مانند Requests/sec، Current Connections، CPU, Memory
-
نظارت بر Application Poolها: زمان بازیابی، صف درخواست، زمان پاسخ
-
بهبود مقیاسپذیری: افزایش ظرفیت، کشینگ، فشردهسازی، CDN
-
بررسی لاگها (HTTP و HTTPERR) برای تشخیص وضعیتهایی مانند 502.3، 503 و 404
-
استفاده از اسکریپتها، PowerShell یا سیستم اتوماسیون برای مدیریت چند سرور
رفع اشکال، نگهداری و پشتیبانی
بعد از راهاندازی و پیکربندی IIS، چالش اصلی تبدیل میشود به نگهداری پایدار، رفع اشکال مؤثر و اطمینان از دسترسپذیری بالا. در این بخش به تکنیکها و راهکارهای عملی و حرفهای میپردازیم که مدیران فناوری اطلاعات میتوانند در محیطهای واقعی به کار ببرند.
۱. رویکرد سیستماتیک در عیبیابی (Troubleshooting Approach)
برای حل مؤثر مشکلات در IIS، بهتر است یک روش ساختاری داشته باشید:
-
گام اول: شناسایی سریع نوع خطا
بر اساس کد HTTP خطا (مثلاً 404، 500، 503) یا پیام خطای ظاهرشده، تشخیص اولیه بدهید. مایکروسافت مرجع جامعی برای رفع خطاهای IIS دارد. -
گام دوم: بررسی لاگها و Event Viewer
بررسی لاگهای IIS (W3C، Extended) و خطاهای سیستم در Event Viewer (بخش Application و System) کمک میکند ریشه مشکل را پیدا کنید. -
گام سوم: فعال کردن Failed Request Tracing
با فعالسازی این قابلیت، IIS جزئیات کاملتر از درخواستهای شکستخورده را ثبت میکند و به شناسایی مشکل در لایههای داخلی کمک میکند. -
گام چهارم: کنترل منابع و عملکرد
بررسی مصرف حافظه، CPU، صف درخواستها و ترافیک با ابزارهایی مثل Performance Monitor یا ابزارهای نظارتی اختصاصی. -
گام پنجم: جداسازی مؤلفهها
اگر مشکل مربوط به کد برنامه است، سرویس وب یا لایه بعدی، سعی کنید با غیرفعالکردن موقتی ماژولها یا فعالسازی حالت محدود، بخش مشکل را محدود کنید.
۲. مدیریت و رفع خطاهای رایج در Application Poolها
Application Poolها یکی از نقاط حساس باشند؛ خطاهایی مانند توقف ناگهانی، مصرف بالای منابع یا Crashes ممکن است پیش بیاید:
-
اگر تعداد درخواستهای زیاد باعث خطای 503 شود، ممکن است Application Pool صف درخواستها را پر کند یا Rapid-Fail Protection فعال شود. در این حالت، باید Queue Length و تنظیمات Rapid-Fail Protection را بررسی کنید.
-
اگر Application Pool مرتباً recyle میشود، ممکن است نشتی حافظه (memory leak) در برنامه وجود داشته باشد—تحلیل عملکرد و کد داخل برنامه ضروری است.
-
هویت (Identity) Application Pool باید دسترسی لازم به پوشههای فایل، دیتابیس و منابع دیگر داشته باشد. اگر دسترسی نداشته باشد، خطاهای Permission Denied رخ خواهد داد.
-
اطمینان حاصل کنید نسخه .NET یا پلتفرم اجرایی انتخابشده در Pool با نیاز برنامه مطابقت دارد.
-
بررسی فایل web.config و پیکربندی XML؛ خطاهای سینتکس میتواند به مشکلات جدی منجر شود.
۳. لاگبرداری پیشرفته و مدیریت لاگها
یک سیستم لاگبرداری قوی کمک میکند نه فقط خطاها را رفع کنید، بلکه روندها را تشخیص دهید و پیشبینی کنید:
-
همیشه لاگبرداری فعال باشد؛ غیرفعالکردن آن ریسک بزرگی است.
-
از بهترین روشهای لاگبرداری استفاده کنید: اجتناب از ذخیره داده حساس، متمرکز کردن لاگها، تعیین دوره نگهداری منطقی (مثلاً ۹۰ روز)
-
استفاده از ابزارهای تجمیع و تحلیل لاگ (Log Aggregator / SIEM) برای تسهیل پایش و هشدار دهی
-
در لاگهای IIS فیلدهای ضروری مانند تاریخ، ساعت، IP مبدأ، وضعیت HTTP، User Agent و URI Query را حتماً ثبت کنید
۴. پشتیبانگیری، بازگردانی و تغییرات کنترلشده
برای مواقع اضطراری یا تغییرات عمده، باید قابلیت بازگردانی سریع وجود داشته باشد:
-
پیکربندی IIS (فایلهای XML مانند ApplicationHost.config، Web.configها) را به صورت منظم نسخه پشتیبان بگیرید
-
اسکریپتهای PowerShell برای backup و restore خودکار بنویسید
-
قبل از اعمال تغییرات حیاتی، در محیط تست (Staging) امتحان کنید
-
در صورت نیاز به مهاجرت یا انتقال سایت، از ابزارهایی مانند Web Deploy استفاده کنید
-
مستندسازی کامل پیکربندیها، نسخهها و تغییرات برای تیم پشتیبانی بعدی
۵. مانیتورینگ، هشدار و بهینهسازی پیشگیرانه
استراتژی پیشگیرانه به جای واکنشی، کلید پایداری است:
-
از Counters معیار مانند Requests/sec، Current Connections، CPU Usage، Memory Usage استفاده کنید
-
تنظیم هشدار (Alert) در صورت عبور از آستانهها
-
مانیتورینگ وضعیت Application Poolها، تعداد بازیابیها، زمان پاسخدهی
-
استفاده از ابزارهای جانبی (مثلاً LeanSentry) برای تحلیل پیشرفته عملکرد و کشف گلوگاهها
-
مرتباً بررسی و بهینهسازی پیکربندیهای IIS: کشینگ، فشردهسازی، ماژولهای فعال
-
حذف ماژولها و ویژگیهای غیرضروری برای کاهش بار و سطح حمله
بیشتر بخوانید: راهنمای جامع انتخاب کانفیگ مناسب برای سرور HPE بر اساس نیاز کسبوکار
مثالهایی از عیبیابی
در ادامه چند سناریوی پیشرفته عیبیابی حرفهای برای IIS ارائه میدهیم که شامل موقعیتهایی مثل مواجهه با خطای HTTP 503 یا مصرف بالای حافظه است. همراه با دستورهای PowerShell و مثالهای پیکربندی که میتوانید در محیط تولید یا تست استفاده کنید.
سناریو ۱: خطای HTTP 503 – «Service Unavailable»
شرح مشکل:کاربر وقتی به سایت مراجعه میکند، خطای 503 Service Unavailable میبیند. در IIS، 503 معمولاً زمانی رخ میدهد که Application Pool مربوطه متوقف شده باشد یا Rapid-Fail Protection فعال شده باشد زیرا فرآیند w3wp مرتباً Crashe میکند.
علل رایج
-
Application Pool متوقف شده (stop) یا در وضعیت غیرفعال
-
نام کاربری یا رمز عبور هویت Application Pool تغییر کرده یا منقضی شده
-
Rapid-Fail Protection باعث غیرفعال شدن Pool بعد از چند بار کرش پیدرپی شده
-
مشکل دسترسی به پوشه فیزیکی یا مجوزها
-
اشتباه در ماژولها یا افزونههای نصبشده
-
محدودیت اتصال (Connection Limit) پر شده
-
اشکال در سرویس WAS یا http.sys
گامهای عیبیابی و دستورات PowerShell
-
بررسی وضعیت Application Pool
Get-WebAppPoolState -Name "MyAppPool"
اگر وضعیت
StoppedیاFailingباشد، باید آن را Start کنید.Start-WebAppPool -Name "MyAppPool"
-
بررسی گزارشات Event Viewer
خطاهای مرتبط با WAS یا w3wp ممکن است در Event Viewer ثبت شده باشد (Log > System / Application). -
بررسی Rapid-Fail Protection و تنظیمات آن
در تنظیمات Advanced برای Application Pool، گزینههای مربوط به Rapid-Fail Protection (حداکثر تعداد کرش در زمان معین) را بررسی کنید. میتوانید از PowerShell برای تنظیم مقادیر استفاده کنید، مثلاً:Set-ItemProperty IIS:\AppPools\MyAppPool -Name "failure.rapidFailProtection" -Value False
(غیرفعال کردن Rapid-Fail Protection برای تست؛ در محیط Production با احتیاط)
-
بررسی هویت (Identity) Application Pool
ممکن است هویت انتخاب شده (مثلاً کاربر اختصاصی) رمز عبورش تغییر کرده باشد:Set-ItemProperty IIS:\AppPools\MyAppPool -Name "processModel.identityType" -Value "ApplicationPoolIdentity"
یا اگر از کاربر خاص استفاده میکنید، مجدداً نام کاربری و رمز عبور تعریف کنید.
-
فعال کردن Failed Request Tracing برای خطاهای 500–999
این امکان کمک میکند تا درخواستهایی که حتی به برنامه نمیرسند، ثبت شوند. اگر هیچ فایلی در دایرکتوری FRT تولید نشده، احتمالاً مشکل قبل از ورود به لایه وب است (مثلاً در لایه http.sys یا IIS core) . -
چک کردن لاگهای http.sys / HTTPERR
اگر درخواست اصلاً به w3wp نرسیده باشد، ممکن است در لاگهای http.sys یا HTTPERR ثبت شده باشد. -
ریست یا راهاندازی مجدد IIS
iisreset
یا:
Restart-Service W3SVC
Restart-Service WAS
مثال سناریو
فرض کنید Application Pool تحت نام MyAppPool کرش کرده است:
-
ابتدا اجرا کنید:
Get-WebAppPoolState -Name MyAppPool
اگر پاسخ
Stoppedبود، آن را Start کنید:Start-WebAppPool -Name MyAppPool
-
اگر دوباره خطا آمد، Rapid-Fail Protection را موقتاً غیرفعال کنید:
Set-ItemProperty IIS:\AppPools\MyAppPool -Name "failure.rapidFailProtection" -Value False
-
سپس وضعیت را از Event Viewer بررسی کنید یا Trace را فعال کنید.
-
اگر هویت Pool کاربری خاص است، مجدداً آن را با نام کاربری و رمز عبور معتبر پیکربندی کنید یا به Identity پیشفرض بازگردانده شود.
این رویکرد گام به گام میتواند کمک کند تا علت خطای 503 را شناسایی و رفع کنید.
سناریو ۲: مصرف بالای حافظه (Memory Leak یا استفاده زیاد از RAM توسط w3wp)
شرح مشکل: فرایند w3wp.exe (Worker Process مربوط به Application Pool) در مدت زمان کوتاهی حافظه زیادی مصرف میکند (مثلاً هفت، هشت یا ده گیگابایت) و ممکن است در نهایت IIS یا سرور دچار وضعیتی شود که منابع آزاد باقی نماند.
علل رایج:
-
وجود نشتی حافظه (Memory Leak) در قطعات بومی (native) یا کتابخانههای unmanaged
-
کد برنامه در .NET که اشیاء را آزاد نمیکند
-
ماژولهای فعال در IIS که حافظه را نگه میدارند
-
افزایش ترافیک ناگهانی یا تعداد درخواستهای معلق
-
تنظیمات اشتباه Application Pool (مثلاً عدم محدودیت Private Memory)
گامهای عیبیابی و دستورات PowerShell
-
شناسایی PID مربوط به Application Pool
appcmd list wp
این دستور لیستی از PIDهای w3wp با Application Pool متناظر میدهد.
-
مانیتورینگ Counters با Performance Monitor
بر روی سرور، Countersهای زیر را اضافه کنید:-
Process → Private Bytes (برای w3wp)
-
Process → Virtual Bytes
-
.NET CLR Memory → # Bytes in all Heaps
-
Memory → Available Bytes
با رشد مداوم Private Bytes که خطی و بدون تغییر کند، احتمال نشتی وجود دارد.
-
-
جمعآوری Dump و تحلیل
وقتی مشاهده شد که مصرف حافظه از آستانه معقول گذشته است، یک dump از فرآیند بگیرید (مثلاً با DebugDiag یا ProcDump) و تحلیل کنید تا ببینید کدام اشیاء یا کتابخانهها بیشترین مصرف را دارند. -
محدود کردن حافظه مجاز Application Pool
میتوانید با PowerShell یا تنظیمات IIS محدودیت مصرف حافظه را به Application Pool تحمیل کنید:Set-ItemProperty IIS:\AppPools\MyAppPool -Name "recycling.privateMemory" -Value 1048576 # به کیلوبایت
این مقدار مثال است (در اینجا حدود 1 گیگابایت) — اگر فرآیند به آن رسید، Pool ریسایکل خواهد شد.
-
تنظیم زمانبندی ریسایکل برنامه (Periodic Recycling)
اگر تشخیص داده شود حافظه به تدریج افزایش مییابد، میتوانید تنظیم کنید که Application Pool مثلاً هر شب ریسایکل شود:Set-ItemProperty IIS:\AppPools\MyAppPool -Name "recycling.periodicRestart.time" -Value "03:00:00"
همچنین میتوانید بر اساس بازه فعالیت یا تعداد درخواست ریسایکل کنید.
-
غیرفعال کردن ماژولهای غیرضروری
ماژولهایی که در IIS فعال هستند ولی استفاده نمیشوند، ممکن است حافظه را مصرف کنند. بررسی کنید ماژولهای فعال و در صورت امکان، ماژولهای غیرضروری را حذف یا غیرفعال کنید.
مثال سناریو
فرض کنید که w3wp برای MyAppPool حافظهای برابر با 8 گیگابایت مصرف کرده است:
-
ابتدا PID آن را بیابید:
appcmd list wp
-
سپس Counters اجرای حافظه را در PerfMon فعال کنید و رشد Private Bytes را بررسی کنید.
-
اگر رشد بدون توقف و خارج از کنترل است، Dump بگیرید و تحلیل کنید:
برای مثال با ProcDump:procdump -ma <PID> C:\Dumps\MyAppPoolLeak.dmp
-
بعد میتوانید محدودیت حافظه برای Pool بگذارید:
Set-ItemProperty IIS:\AppPools\MyAppPool -Name "recycling.privateMemory" -Value 2147484 # تقریباً 2 گیگابایت
-
همچنین برنامهریزی کنید Pool هر شب در زمان کمبار ریسایکل شود:
Set-ItemProperty IIS:\AppPools\MyAppPool -Name "recycling.periodicRestart.time" -Value "02:00:00"
سناریو ۳: استفاده بالای CPU یا پردازش معلق (Hung Requests) در w3wp
شرح مشکل: فرضیه های w3wp به طور مداوم درصد زیادی از CPU را استفاده میکند یا درخواستهایی در صف معلق میمانند و به پاسخ نمیرسند.
علل رایج:
-
حلقههای بیپایان در کد برنامه
-
عملیات زمانبر بدون async/await یا offload
-
تعداد زیاد درخواست همزمان
-
اشکال در پایگاه داده یا I/O که باعث تأخیر پاسخدهی میشود
-
ماژول IIS که در بخش Pipeline تأخیر ایجاد میکند
گامهای عیبیابی و دستورات PowerShell
-
مشاهده درخواستهای جاری (Long-Running Requests)
با AppCmd:appcmd list requests
این دستور لیستی از درخواستهایی که در حال اجرا هستند، به همراه مدت زمان و URL را نشان میدهد.
-
مشاهده وضعیت Worker Processes در IIS Manager
در بخش Worker Processes میتوانید ببینید کدام w3wp فعال است و چه تعداد درخواست در صف دارد. -
استفاده از Performance Counters
Counters مفیدی مانند:-
ASP.NET Applications → Requests In Application Queue
-
W3SVC_W3WP → Current Connections
-
CPU Usage (Process)
-
.NET CLR Exceptions
-
-
تنظیم آستانههای CPU یا تعداد درخواست در Application Pool
میتوانید در تنظیمات Advanced Application Pool محدودیت CPU بگذارید، مثلاً اگر CPU بیش از 70٪ باشد بر پایه زمان توقف یا recycle انجام شود. -
ریسایکل Pool یا Force Recycle via PowerShell
اگر تشخیص دادیم Pool درگیر است:Restart-WebAppPool -Name MyAppPool
مثال سناریو
فرض میخواهید ببینید چه درخواستهایی در MyAppPool در حال تعلیق هستند:
-
ابتدا فهرست درخواستها را بگیرید:
appcmd list requests
مثلاً خروجی:
REQUEST "abcd1234" (url:GET /api/longprocess, time:120000 msec, client:10.0.0.1, stage:ExecuteRequestHandler)
-
اگر یک URL خاص در وضعیت معلق دیده شد، بررسی کنید که آیا آن کد باعث تأخیر زیاد است یا بلاک شده است.
-
اگر بار CPU بالا است و درخواستها صف شدهاند، میتونید Pool را مجدداً راهاندازی کنید:
Restart-WebAppPool -Name MyAppPool
جمع بندی
در جمعبندی، IIS به عنوان یک وبسرور قدرتمند و انعطافپذیر، از نصب ساده تا پیکربندیهای پیشرفته و مدیریت حرفهای، ابزار کاملی برای مدیران فناوری اطلاعات فراهم میکند تا سرویسهای تحت وب سازمان را با امنیت، پایداری و عملکرد بهینه راهاندازی کنند. از شناخت IIS چیست و تفاوت نسخهها، تا رفع اشکالهای پیچیده مانند خطای 503 یا مدیریت مصرف بالای حافظه و CPU، هر مرحله نیازمند دقت و تجربه حرفهای است تا عملکرد سرویسها تضمین شود. اگر میخواهید تجربه عملی خود در مدیریت IIS را به سطح حرفهای ارتقا دهید و از بهترین شیوههای عیبیابی و پشتیبانی بهرهمند شوید، همین حالا میتوانید با ما در یاقوت سرخ تماس بگیرید و مشاوره تخصصی دریافت کنید تا وبسرور شما با بالاترین کارایی و امنیت راهاندازی شود.






