شما اینجایید
خانه > آموزش > وب سرور آپاچی: بخش سوم پیکربندی

وب سرور آپاچی: بخش سوم پیکربندی

در بخش اول با وب سرور آپاچی آشنا شدیم. در این بخش با اصول و مفاهیم اولیه پیکربندی وب سرور آپاچی آشنا خواهیم شد. لازم به ذکر است که در ادامه آموزش ما مبتنی بر نسخه سازگار با ویندوز آپاچی است و دوستانی که از آپاچی در مجموعه لینوکس بهره می برند با کمی تغییر در شرایط و نام و مسیر فایل ها می توانند از این آموزش بهره ببرند.

فایل های مرتبط با Apache

در ویندوز و توزیع های Redhat/CentOS/Fedora فایل پیکربندی اصلی آپاچی httpd.conf نام دارد که در پوشه conf موجود در پوشه اصلی که آپاچی در آن نصب شده قرار دارد. اما در توزیع های ابونتو/دبیان در زیر دایرکتوری etc/apache2/ فایل های پیکربندی Apache قرار دارند که اصلی ترین آنها apache2.conf است. اگر آپاچی را بوسیله بسته نرم افزاری Wamp Server نصب کرده باشید مسیر فایل پیکربندی آپاچی باید بصورت زیر باشد. با فرض اینکه ومپ سرور را در درایو C و با تنظیمات پیش فرض نصب کرده باشید.

نکته: در مثال بالا عبارت عددی ۲٫۴٫۲۲ اشاره به نسخه آپاچی نصب شده دارد و ممکن است در سیستم شما این عدد کمی متفاوت باشد.

راه ساده تر باز کردن فایل httpd.conf روش زیر است:

آیکون ومپ سرور در قسمت System Try (کنار ساعت) -> چپ کلیک -> Apache -> گزینه httpd.conf

باز کردن فایل Httpd.conf از منوی ومپ سرور

تمامی تنظیمات اصلی وب سرور آپاچی در فایل httpd.conf صورت می گیرد.

این فایل (و معادل آن) از سه بخش اصلی تشکیل شده است :

  • تنظیمات سرویس یا Daemon مربوط به Apache که در توزیع های ابونتو/دبیان به نام apache2 و در توزیع های Redhat/CentOS/Fedora به نام httpd خوانده شده و Global Environment نامیده می شوند.
  • تنظیمات مربوط به خود وب سرور که در حال کار بر روی آن هستید که Main server configuration
  • تنظیمات مربوط به Virtualhost ها که Virtual Hosts نامیده می شوند.

نکات مهم قبل از شروع پیکربندی آپاچی

نوشتن توضیح (Comment) در فایل httpd.conf

برای نوشتن توضیحات در فایل httpd.conf کافی است خط را با کاراکتر # (number یا همان hash) شروع کرد.

متغیرها در پیکربندی آپاچی

در فایل httpd.conf می توان متغیرهایی را تعریف کرد و بعد از آنها در جای مورد نیاز بهره برد. برای تعریف متغیر ها از دایرکتیو Define استفاده می شود. قالب تعریف یک متغیر بصورت زیر است.

در فایل Httpd.conf تعدادی متغیر ازپیش تعریف شده است که نباید نام یا مقدار آنها را تغییر داد. این متغیر ها در نسخه ۲٫۴ آپاچی بشرح ذیل می باشد:

همانطور که در خط ۳ مثال فوق مشاهده می کنید می توان برای اشاره به یک مسیر خاص از متغیرها استفاده کرد. در مثال فوق متغیری با نام INSTALL_DIR و مقدار c:/wamp64 تعریف شده که در خط ۴ از ان بصورت ${INSTALL_DIR} استفاده شده است. این متغیر به مسیر نصب ومپ سرور اشاره می کند.

برای فراخوانی یک متغیر کافی است ابتدا کاراکتر $ را تایپ کرده و سپس داخل عبارت {} نام متغیر را ذکر کنید.

آشنایی با Directive ها در پیکربندی Apache

به هر یک از تنظیمات قابل پیکربندی یک دایرکتیو (Directive) گفته می شود. در ادامه تعدادی از مهمترین دایرکتیوهای مربوط به تنظیمات سراسری (Global Configuration/Global Environment) را توضیح خواهیم داد.

Include و IncludeOptional

با استفاده از یک directive به نام Include می توان فایل های پیکربندی دیگری (configuration files) را در فایل فعلی فراخوانی کنیم. می توان در نوشتن این دایرکتیو از Wildcardها نیز استفاده کرد به عنوان مثال می توان تمامی فایل ها یا فایل هایی با مشخصه خاص را از پوشه یا پوشه هایی بصورت کلی به فایل اصلی ضمیمه کرد. نکته ای که مهم است این است که در نوشتن عبارات Wildcard باید دقت کافی را داشته باشید چون اگر تفسیر این عبارت برای وب سرور ممکن نباشد خطا رخ می دهد و وب سرور دیگر قادر به اجرا نخواهد بود. به عنوان مثال اگر با Wildcard همه فایل های یک پوشه را فراخوانی کنید و در بین آن فایل ها فقط یک فایل موقتی خالی وجود داشته باشد آپاچی دیگر بدرستی اجرا نخواهد شد. برای اینکه از اینگونه خطاها جلوگیری کنیم می توان بجای دایرکتیو Include از دایرکتیو  IncludeOptional استفاده کرد. این دایرکتیو از آپشن هایی که با خطا روبرو می شوند صرف نظر می کند.

مسیر فایل ها می تواند بصورت مطلق (absolute path) نوشته شود و یا بصورت نسبی (relative) نسبت به مسیر پوشه سرور که در دایرکتیو ServerRoot مشخص شده است. مثالی از مسیردهی صریح در دایرکتیو Include:

مثالی از مسیردهی نسبی نسبت به مسیر پوشه سرور که در دایرکتیو ServerRoot مشخص شده:

ممکن است از Wildcardها در هر دو بخش دایرکتوری و یا فایل، مسیر استفاده شود. به مثال زیر دقت کنید:

مثال بالا با شکست روبرو می شود اگر در مسیر conf/vhosts هیچ پوشه ای وجود نداشته باشد و یا اگر در حداقل یکی از پوشه ها هیچ فایلی با پسوند conf وجود نداشته باشد.

برای اینکه با مشکل فوق مواجه نشویم می توانیم از دستور زیر استفاده کنیم که در صورت بروز حالات فوق از آنها صرف نظر می کند.

ServerSignature

امضای سرور، دایرکتیوی است که در حالت پیش فرض فعال است و وقتی فعال باشد در تمامی صفحات تولید شده توسط سرور مثل صفحات خطای ۴۰۴، ۴۰۳ و … در پابرگ صفحه مشخصات آپاچی و سیستم عامل قید می شود. بهتر است این دایرکتیو برای امنیت بیشتر سرور بر روی حالت off تنظیم شود. خب دلیل اصلی بودن چنین دایرکتیوی این است که اگر کاربر از مجموعه ای از سرورهای پراکسی استفاده می کرد و با خطایی مواجه شد بتواند بفهمد که صفحه خطا توسط کدام سرور ایجاد شده است.

ServerTokens

این دایرکتیو تعیین می کند که سرور مشخصات سیستم عامل و ماژول های مورد استفاده را در فیلد هدر ارسالی به کاربر تا چه حد منتشر کند. این دایرکتیو، دایرکتیو ServerSignature را نیز کنترل می کند. به عنوان مثال:

timeout

بصورت پیشفرض ۳۰۰ ثانیه است. (در توزیع های Redhat/CentOS/Fedora مقدار پیشفرض ۶۰ ثانیه است) و مقدار آن حداکثر زمان برحسب ثانیه برای تکمیل کردن هر درخواست است.

KeepAlive

مقادیر On و Off را می پذیرد. اگر مقدارش On باشد، سرویس Apache اجازه بیشتر از یک اتصال از هر درخواست (کلاینت) را می دهد. (درخواست های چند اتصالی از سوی هر کلاینت به وب سرور). مقدار پیشفرض آن Off است، پس با هر درخواست باید یک اتصال تازه نیز ایجاد شود. تنظیم این پارامتر بسیار مهم بوده زیر بر روی عملکرد سرویس تاثیر گذار است.

KeepAliveTimeout

تعداد ثانیه ها برای انتظار در دریافت درخواست بعدی از سوی همان کلاینت و بر روی همان درخواست کلاینت. یعنی چه مدت وب سرور برای دریافت درخواست بعدی از سوی یک کلاینت و بر روی یک اتصال و پس از تمام شدن درخواست فعلی صبر می کند.

MaxKeepAliveRequests

حداکثر تعداد درخواست های مجاز که بر روی یک اتصال، یعنی کنترل می کند چه تعداد درخواست می تواند پیش از قطع یک اتصال از یک کلاینت تا پیش از قطع شدن آن اتصال، به وب سرور داده شود. مقدار صفر برای این پارامتر به معنی عدم محدودیت (نامحدود بودن است). بهتر است با یک عدد بزرگ برای بالابردن کارایی، مقدار دهی شود.

Listen

به عبارتی ساده این پارامتر درگاهی (Port) را که وب سرور بر روی آن به درخواست های Http گوش می دهد را تعیین می کند. وقتی سرویس httpd آپاچی اجرا می شود به درگاه و آدرس مشخصی در دستگاه میزبان متصل شده و منتظر درخواست های ورودی می شود. بصورت پیش فرض این سرویس به همه آدرس های دستگاه گوش می دهد. قطعاً در یک وب سرور واقعی نیاز است که این قاعده را تغییر دهیم. در حالت های واقعی نیاز است که سرور فقط به پورت (های) خاصی گوش دهد، یا فقط به آدرس های انتخاب شده یا ترکیبی از این دو. البته امروزه برای پیاده سازی این حالات از ویژگی VirtualHost که تعیین می کند httpd چگونه به IP آدرسها، hostname ها و پورت های مختلف پاسخ گو باشد، استفاده می شود.

دایرکتیو Listen به سرور می گوید که فقط درخواست های وارده از پورت ها یا آدرس ها یا ترکیبی از هردو اینها را قبول کند. اگر در دایرکتیو Listen فقط یک شماره پورت مشخص شده باشد، سرور به آن پورت بر روی همه کارت های شبکه (all interfaces) گوش فرا می دهد. اگر به همراه شماره پورت آدرس IP رابط خاصی مشخص شده باشد سرور بر روی همان رابط (کارت شبکه) به پورت مشخص شده برای دریافت درخواست های Http گوش می دهد.

می توان بصورت همزمان از چند دایرکتیو Listen که هر کدام حالت خاصی را مشخص کرده اند استفاده کرد. به عنوان مثال برای اینکه سرور به درخواست ها بر روی پورت ۸۰ و ۸۰۰۰ همه کارت های شبکه سیستم گوش فرا دهد باید پیکربندی زیر را بکار برد:

برای اینکه سرور به درخواست ها بر روی پورت ۸۰ یک کارت شبکه و پورت ۸۰۰۰ کارت شبکه ای دیگر گوش کند پیکربندی می تواند بشکل زیر باشد:

برای استفاده از آدرس IP نسخه ۶ یعنی IPv6 باید آدرس را درون براکت نوشت:

User/Group

دو پارامتری که کاربر و گروه کاربری سرویس Apache را تعیین می کند. یک اشتباه بزرگ تعیین این دو پارامتر به ترتیب با نام کاربری root و گروه کاربری root است که با هک شدن سرویس، هکر کنترل کامل (دسترسی root) را خواهد داشت. کاربر/گروهی که انتخاب می شوند نباید root باشد و نباید مجوز های کاربری root را توسط ابزاری مانند sudo گرفته باشد. یک کاربر/گروه بدون هیچ مجوز سیستمی. وب سرور از این کاربر/گروه برای کارهای خود استفاده می کنند. همچنین کاربر وب سرور نباید امکان Login به سیستم را داشته باشد و Shell ان باید به nologin تنظیم شده باشد.

از تنظیمات سرویس Apache (دومین بخش تنظیمات بالا)، می توان به موارد زیر اشاره نمود.

DocumentRoot

زیر دایرکتوری تنظیم شده در این پارامتر، تمامی فایل های مربوط به وب سرور شما را نگه داری می شود. (فایل های html/css/javascript و فایل های php و هر فایل دیگری). مثلا در ومپ سرور این مقدار به صورت پیش فرض به پوشه ای با نام WWW که در پوشه اصلی ومپ ایجاد شده اشاره می کند و فایل index.php صفحه اولیه Wamp Server که در زمان فراخوانی Localhost نمایش داده می شود در این پوشه قرار دارد. البته در نسخه ای از آپاچی که بصورت مستقل نصب می شود به صورت پیش فرض این مسیر به پوشه (شاخه)  Htdocs درون ریشه ی فولدر نصب خود آپاچی اشاره میکند.

ما میتوانیم این مسیر را به دلخواه تغییر دهیم. کافی است مسیر پوشه دلخواه را بصورت زیر در فایل Httpd.conf وارد کنیم:

قالب:

مثال)

همانطور که در بالا شرح داده شد می توان از متغییرها استفاده کرد. لذا در مثال فوق مشاهده می کنید که از متغییر INSTALL_DIR استفاده شده است.

LoadModule

قبل از اینکه دایرکتیو LoadModule را توضیح دهیم باید با مفهوم DSO:Dynamic Shared Object و طراحی ماژولار آشنا شویم.

Dynamic Shared Object یا «شیء به اشتراک گذاشته شده پویا» که بصورت مخفف DSO نامیده می شود فایلی است که توسط چند برنامه بصورت همزمان قابل استفاده است.

طراحی ماژولار سبکی است که در آن برنامه اصلی با قابلیت های مشخص اولیه ای ارائه می شود. در ادامه قابلیت های بیشتری برای آن بصورت ماژول های اضافه ارائه می گردند که استفاده کننده بنا به نیاز خود می تواند این ماژول ها را تهیه کرده و به برنامه اصلی اضافه کند. نمونه معروف این سبک را در مرورگر ها مشاهده می کنید. به عنوان مثال کروم یا فایرفاکس هر دو دارای Extension ها و Pluginهایی هستند که با نصب آنها قابلیت های جدیدی به این مرورگرها اضافه می شود. سیستم های مدیریت محتوایی نظیر وردپرس نیز با این مدل طراحی استفاده می کنند و قابلیت های اضافه را در قالب افزونه های قابل نصب ارائه می کنند.

مدل طراحی ماژولار مزیت های بیشماری دارد:

  1. این روش امکان مشارکت برنامه نویسان دیگر را در توسعه یک نرم افزار فراهم کرده و باعث تقویت کار گروهی می شود. برنامه نویسان می توانند قابلیت های جدیدی را در قالب ماژول نوشته و به برنامه اصلی اضافه کنند.
  2. در حالت عادی بسیاری از کاربران به بسیاری از قابلیت های یک برنامه نیاز ندارند و ارائه کردن همه قابلیت ها در نسخه اصلی برنامه نیز کار عاقلانه ای نبوده و باعث افزایش حجم و کاهش راندمان برنامه خواهد شد. از این رو روش ماژولار کمک می کند تا کاربران بنا به نیاز خود قابلیت ها را به برنامه اضافه یا کم کنند.
  3. و بسیاری مزیت دیگر که از حوصله این مطلب خارج است.

آپاچی نیز بر اساس معماری ماژولار نوشته شده و بسیاری از قابلیت های آن بصورت ماژول های جداگانه ارائه شده اند. در پوشه اصلی نصب آپاچی پوشه ای با نام modules وجود دارد که در آن فایل های DSO ماژول های آپاچی با پسوند so ذخیره شده اند. برای اینکه یک ماژول را به آپاچی اضافه کنیم باید از دایرکتیو LoadModule استفاده کنیم. قالب این دایرکتیو بشکل زیر است:

ابتدا عبارت کلیدی LoadModule سپس نام ماژول و بعد مسیر فایل مرتبط با آن ماژول

البته در ومپ سرور راه ساده تری برای فعال سازی یا غیر فعال سازی ماژول ها دارد:

چپ کلیک بر روی آیکون ومپ در نوار وظیفه (در قسمت اعلانات) -> گزینه Apache -> گزینه Apache modules -> لیست ماژول ها

فعال و غیرفعال سازی ماژول های آپاچی از طریق منوی ومپ سرور

وجود علامت تیک در کنار هر گزینه نشان دهنده فعال بودن آن ماژول است و نبود تیک نشان دهنده غیر فعال بودن آن ماژول می باشد. باید بدانید با فعال کردن هر گزینه در این منو باعث می شود تا علامت # از اول خط متناظر آن در فایل Httpd.conf برداشته شود و بلعکس اگر ماژولی را غیر فعال کنید باعث می شود تا در ابتدای خط متناظر آن در فایل Httpd.conf کاراکتر # گذاشته شود.

ناگفته نماند این روش فقط برای فعال یا غیرفعال سازی ماژول هایی است که همکنون خط مربوط به پیکربندی آنها در فایل Httpd.conf وجود دارد. برای افزودن یک کاژول جدید باید حتماً فایل httpd.conf را ویرایش کنید. به عنوان مثال برای فراخوانی و فعال سازی ماژول PHP از دایرکتیو زیر استفاده شده است.

IfModule

همانطور که ملاحظه کردید می توان به آپاچی ماژول هایی را اضافه کرد. بطبع ممکن است هر ماژول دارای تنظیمات و دایرکتیوهای خاص خود باشد و نیاز باشد تا آنها را در فایل Httpd.conf پیکربندی کرد. آپاچی برای اطمینان از اینکه دایرکتیوهای مرتبط با هر ماژول تنها در صورت فعال بودن آن ماژول به کار بسته شود دایرکتیو IfModule را ارائه کرده است. این دایرکتیو با ساختاری تگ گونه کمک می کند تا پیکربندی های مرتبط با هر ماژول فقط زمانی به کار بسته شود که آن ماژول فعال باشد. قالب این دایرکتیو بصورت زیر است:

ServerAdmin

با این دایرکتیو آدرس رایانامه مدیر سرور را به آپاچی معرفی می کنیم. اگر خطا یا مشکلی رخ دهد آپاچی گزارش ان را به این آدرس ارسال می کند. همچنین این آدرس در برخی صفحات تولید شده توسط آپاچی نظیر صفحات خطا نمایش داده می شود. قالب این دایرکتیو به شکل زیر می باشد:

ServerName

این دایرکتیو نام و شماره پورتی که سرور اپاچی با آن خود را شناسایی می کند را مشخص می کند. مقدار این دایرکتیو بصورت پیش فرض بصورت زیر می باشد:

اگر نام ثبت شده مشخصی در سرویس DNS ندارید باید آدرس IP سیستم را بجای نام آن وارد کنید.

Directory

یکی از مهمترین دایرکتیوهای آپاچی دایرکتیو Directory است. با این دایرکتیو می توانیم سطح دسترسی به منابع فایل سیستم در اختیار سرور را مشخص کنیم. منظور از منابع پوشه هایی است که سرور به آنها دسترسی دارد. قالب این دایرکتیو بصورت زیر است:

برای حالتی که برای یک پوشه هیچ سطح دسترسی تعریف نشده باید یک حالت پیش فرض داشته باشیم تا آپاچی آن را برای آن پوشه در نظر بگیرد. پیکربندی زیر حالت پیش فرض را تنظیم می کند.

پیکربندی فوق هرگونه دسترسی به کل فایل سیستم سرور را سلب می کند. این کار برای حمایت از امنیت سرور الزامی است. حال می توان برای هر پوشه دیگری پیکربندی سطح دسترسی موردنیاز آن را همچون مثال زیر که سطح دسترسی پوشه www موجود در پوشه wamp را تعیین می کند ایجاد کرد.

برای درک بهتر چگونگی تنظیم سطح دسترسی باید با مفاهیم زیر اشنا شویم:

دایرکتیو Options حالت های مختلف موردنیاز برای چگونگی سطح دسترسی به پوشه مشخص شده را تعیین می کند. این تنظیم می تواند دو گزینه “None” ،”All” یا ترکیبی از گزینه های Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews باشد.

تنظیم دایرکتیو Options امری پیچیده و مهم است که توضیح کامل آن از حوصله این مطلب خارج است از این رو برای کسب اطلاعات بیشتر در مورد آن به آدرس زیر مراجعه کنید: http://httpd.apache.org/docs/2.4/mod/core.html#options

دایرکتیو AllowOverride مشخص می کند که چه دایرکتیوهایی در فایل های .htaccess قابل استفاده هستند. مقدار این دایرکتیو نیز می تواند یکی از گزینه های “All”، “None” یا ترکیبی از واژه های: AllowOverride FileInfo AuthConfig Limit باشد. وقتی مقدار این دایرکتیو “All” باشد به این معنی است که همه پیکربندی ها قابل استفاده در فایل htaccess هستند.

اما توضیح در مورد عبارت Require: برای این دایرکتیو سه حالت اصلی و بی نهایت حالت سفارشی قابل تنظیم است. در زیر چند حالت مهم را با ذکر مثال توضیح می دهیم:

حالت فوق به این معنی است که سرور برای پوشه مشخص شده فقط به درخواست های محلی اجازه دسترسی بدهد.

حالت فوق باعث رد همه درخواست ها خواهد شد.

حالت فوق باعث قبول همه درخواست ها خواهد شد.

برای درک بهتر دایرکتیو Require به این آدرس مراجعه کنید: https://httpd.apache.org/docs/2.4/howto/access.html

DirectoryIndex

این دایرکتیو به ما اجازه می دهد تا اولویت نام فایل اصلی که در هر پوشه توسط آپاچی در هر درخواست به کلاینت بصورت پیش فرض ارسال می شود را مشخص کنیم. شرط استفاده از این دایرکتیو این است که ماژول dir_module فعال باشد. به مثال زیر دقت کنید:

همانطور که می بینید در پیکربندی فوق اینگونه تعیین شده که آپاچی ابتدا بدنبال فایلی با نام index.php گشته و چنانچه آن را پیدا کرد آن را به کلاینت ارسال کند در غیر اینصورت به دنبال فایل index.php3 بگردد و اگر آن فایل نیز پیدا نشد بدنبال فایل بعدی و همینطور تا انتها پیش برود. چنانچه هیچ فایل مطابق با لیست تعیین شده در این دایرکتیو در پوشه درخواست شده پیدا نشود آپاچی لیست تمامی فایل ها را (بشرط فعال بودن Indexing) به کاربر نمایش می دهد.

Files

همانطور که می توان سطح دسترسی به پوشه ها را با دایرکتیو Directory مشخص کرد می توان سطح دسترسی به فایل ها را نیز با دایرکتیو Files تعیین کرد. قالب این دایرکتیو بصورت زیر است:

می توان نام یک فایل مشخص را قید کرد و یا بصورت ضابطه ای یک الگو را مشخص کرد. بطور مثال:

پیکربندی فوق اجازه دسترسی به فایل هایی که پسوند آنها با عبارت ht شروع می شود (مثل فایل های .htaccess و .htpasswd) را به هیچ درخواستی نمی دهد.

ErrorLog

این دایرکتیو مسیر فایلی که گزارش خطاهای رخ داده شده برای اپاچی در آن ذخیره می شود را مشخص می کند. بطور مثال:

LogLevel

این دایرکتیو سطح گزارش گیری از رویدادها برای ذخیره در فایل گزارش خطایی که در دایرکتیو ErrorLog مشخص کرده ایم را تعیین می کند. مقادیر قابل استفاده در این دایرکتیو عبارتند از: debug, info, notice, warn, error, crit, alert, emerg. بصورت پیش فرض این دایرکتیو بصورت زیر پیکربندی شده است:

پیکربندی فوق به این معناست که گزارش رویدادهایی تا سطح اخطار در فایل مذکور ذخیره شوند.

ErrorDocument

با این دایرکتیو می توان مسیر فایلی که مایلید در صورت بروز هر یک از خطاهای معروف سرور مثل خطای ۴۰۴ نمایش داده شود را مشخص کنید. قالب این دایرکتیو بصورت زیر است:

چند نمونه مثال:


پس از هر بار تغییر فایل httpd.conf، می بایست سرویس آپاچی را راه اندازی مجدد (Restart) کنید. برای این کار باید به روشی (چه روشی مهم نیست) سرویس Apache را ری استارت کنید. راه ساده: منوی ومپ -> آپاچی -> Service Administration و بعد گزینه restart.

موفق باشید.

سوالات خود را در بخش دیدگاه ها بیان کنید.

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

پاسخ دهید

شش + 2 =

Top