آفلاين كردن يك وب سايت با HttpModules

حتما در وبگردی های روزانه خود به سايت هائی برخورد کرده اید که به هنگام ارسال درخواستی مبنی بر مشاهده صفحه ای از آن ، پیغام در حال بروز رسانی و ... برای شما نمایش داده می شود ، برنامه نویسان برای رعایت مسائل امنیتی و ... در هنگام بروزرسانی یک وب سايت سیستمی پیاده سازی می کنند تا تمامی درخواست ها به يک صفحه خاص هدایت شود و در آن صفحه به کاربر اطلاع داده شود که سايت در حال بروزآوری و ... می باشد.

راه های زیادی برای پیاده سازی چنین تکنیکی موجود می باشد ، اما ASP.net برای پیاده سازی این سناریو از یک روش جالب استفاده می کند ، کافیست در Root وب سايت خود فایلی با نام app_offline.htm قرار دهید ، از این پس و تا زمانیکه این فایل در Root موجود باشد تمامی درخواست های ارسال شده به سايت به این صفحه هدایت میشود.بعد از اینکه کار شما بعنوان برنامه نویس با وب سايت تمام شد می توانید براحتی این فایل را حذف کنید تا وب سايت برای عموم بازدیدکنندگان قابل دسترس باشد. ادامه مطلب

ولي روش بالا يه مشكل داره فرض كنيد شما ADMIN سايت هستيد و ميخواهيد به سايت دسترسي داشته باشيد (براي تست , عملسات نگهداري و…) app_offline.htm نميتونه تشخيص بده شما مديرين يا كاربر

براي حل اين مشكل از روش زير استفاده ميكنيم با استفاده از HttpModule

ابتدا تو web.config ميايم IP خودمون رو تعريف ميكنيم

<add key="AdminIP" value="123.124.125.126" />

بعد با استفاده  از HttpModule درخواست هاي ناخواسته رو فيلتر ميكنيم

public class AppOfflineModule : IHttpModule
{
public void Dispose()
{

}

public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
if (File.Exists(Path.Combine(context.Server.MapPath("~"), "offline.html")))
{
string ip = context.Request.UserHostAddress;
string adminIP = ConfigurationManager.AppSettings["AdminIP"];

if (ip != adminIP)
{
context.RewritePath("~/offline.html");
}
}
}
}

براي اضافه كردن اين HttpModule  هم براحتي از كد زير استفاده ميكنيم

<httpModules>
...
<add name=""AppOfflineModule"" type="AppOfflineModule" />
...
</httpModules>

منبع

نظرات

پست‌های معروف از این وبلاگ

lnav ابزاری بسیار کاربردی برای پیمایش لاگ ها در لینوکس و البته مک

ساختن ایمیج های داکری به کمک BuildKit - بخش دوم

ساختن ایمیج های داکری به کمک BuildKit - بخش اول