سرور چیست و انواع آن
سرور یک کامپیوتر است که کارش جواب دادن به درخواست های بقیه است و برای همین همیشه روشن می ماند؛ سخت افزارش با کامپیوتر شما تفاوت جنسی ندارد، وظیفه اش فرق دارد. چیزی که «سرور سایت» می نامیم در واقع چند لایه روی هم است: سخت افزار، سیستم عامل، وب سرور، و برنامه ای که صفحه را می سازد.
- درس ۷ از ۱۲
- مقدماتی
- رایگان، بدون ثبت نام
چیزی که «سرور» می نامیم، از سایت تا آهن
- سایتتنها لایه ای که بازدیدکننده می بیند و تنها لایه ای که خودتان نوشته اید.
- برنامه و مفسرشکد سایت را اجرا می کند و صفحه را می سازد. اینجا PHP.
- پایگاه داده و حافظه موقتمحتوا و تنظیمات را نگه می دارند. اینجا MariaDB و Redis.
- وب سروردرخواست را می گیرد و اگر فایل آماده باشد خودش تمامش می کند. اینجا nginx.
- سیستم عامل و سخت افزارپی کار. روی این ماشین حتی محیط گرافیکی هم ندارد.
این لایه بندی یک ترتیب یادگیری است و نه یک استاندارد. روی هاست اشتراکی سه لایه پایینی اصلا در دسترس شما نیستند.
آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.
سرور با کامپیوتر خانه شما چه فرقی دارد؟
در جنس، تقریبا هیچ. سرور هم پردازنده و حافظه و دیسک دارد و همان دستورهای آشنا را اجرا می کند. تفاوت در نقش است: کامپیوتر شما منتظر شماست و سرور منتظر بقیه دنیاست. لپ تاپ شما را شب می بندید؛ سروری که بسته شود دیگر سرور نیست.
از همین یک تفاوت نقش، بقیه تفاوت ها بیرون می آیند و هیچ کدام جادویی نیستند. سرور معمولا نمایشگر و صفحه کلید ندارد چون کسی پایش نمی نشیند. برق و شبکه اش دوتایی است چون قطع شدنش هزینه دارد. سخت افزارش سراغ قطعه هایی می رود که ماه ها بی وقفه کار کنند، نه قطعه هایی که در بازی سریع ترند. و روی آن نسخه ای از سیستم عامل نصب می شود که هیچ چیز اضافه ای ندارد؛ روی این سرور، سیستم عامل حتی محیط گرافیکی هم ندارد و همه کار با فرمان انجام می شود.
یک اشتباه رایج که همین جا تمام می شود: «سرور» یک جعبه مشخص نیست، یک نقش است. یک لپ تاپ قدیمی در گوشه اتاق هم اگر همیشه روشن بماند و به درخواست ها جواب بدهد سرور است. آنچه ارزش پول را می سازد نه خود جعبه، که پیوستگی است: برق، شبکه، خنک کاری و کسی که نصفه شب جواب می دهد.

وقتی درخواستی می رسد، دقیقا چه کسی جواب می دهد؟
این جایی است که «سرور» به چند چیز مجزا تقسیم می شود، و تا این تقسیم را نبینید هیچ مشکل سروری قابل تشخیص نیست. اول وب سرور درخواست را می گیرد؛ روی این ماشین nginx نسخه ۱.۲۹.۴ این کار را می کند. اگر چیزی که خواسته شده یک فایل آماده باشد، همان جا تمامش می کند و هیچ برنامه دیگری روشن نمی شود. اگر نه، درخواست را به مفسر برنامه می دهد، اینجا PHP نسخه ۸.۵.۲، که کد سایت را اجرا می کند و در این مسیر از پایگاه داده و از حافظه موقت می پرسد.
تفاوت این دو مسیر را می شود اندازه گرفت و رقمش تکان دهنده است. صفحه اول همین سایت وقتی از فایل آماده جواب داده می شود در بهترین حالت ۲۳ میلی ثانیه طول می کشد تا اولین بایتش برسد. همان صفحه، وقتی مجبورش کنیم دوباره ساخته شود، در بهترین حالت ۱۳۹ میلی ثانیه طول می کشد. یعنی همه آن ۱۱۶ میلی ثانیه اضافه مال لایه برنامه و پایگاه داده است، روی همان ماشین، همان شبکه و همان صفحه. اینکه یک صفحه از پیش ساخته شود یا هر بار ساخته شود، تنها بزرگ ترین تصمیم سرعت یک سایت وردپرسی است.
دو لایه دیگر هم در همین مسیر هستند و کمتر دیده می شوند. پایگاه داده، اینجا MariaDB نسخه ۱۰.۱۱.۱۰، که محتوا و تنظیمات را نگه می دارد. و یک حافظه موقت در رم، اینجا Redis، که جواب پرس و جوهای تکراری را نگه می دارد تا پایگاه داده دوباره از دیسک نخواند.
یک جزئیات که تقریبا هیچ آموزشی نمی گوید: وب سرور و مفسر برنامه روی این ماشین با شبکه حرف نمی زنند. ارتباطشان از یک فایل سوکت روی خود دیسک می گذرد و پایگاه داده هم روی localhost تنظیم شده است. یعنی هیچ کدام از این مکالمه ها هرگز بسته ای در شبکه نمی شوند. اگر این را بدانید، دیگر کند بودن یک صفحه را به «شبکه» نسبت نمی دهید.
مسیر یک درخواست، و جایی که می تواند زودتر تمام شود
-
۱
درخواست می رسد
وب سرور آن را می گیرد. هنوز هیچ برنامه ای روشن نشده است.
-
۲
فایل آماده هست؟ تمام
وب سرور خودش جواب می دهد. روی این سایت ۲۳ میلی ثانیه تا اولین بایت.
-
۳
اگر نه، برنامه اجرا می شود
مفسر روشن می شود و کد سایت را از اول اجرا می کند.
-
۴
از پایگاه داده می پرسد
و از حافظه موقت، تا همان پرسش دوباره از دیسک خوانده نشود.
-
۵
پاسخ ساخته و فرستاده می شود
روی همین سایت ۱۳۹ میلی ثانیه، یعنی ۱۱۶ میلی ثانیه بیشتر از مسیر کوتاه.
دو عددی که اینجا آمده اند کمترین مقدار از پنج اندازه گیری روی همین سرورند و به قدرت ماشین و به خود صفحه بستگی دارند؛ نسبتشان قابل تکرار است، خود عددها نه.
سرور اشتراکی، مجازی، اختصاصی و ابری چه فرقی دارند؟
در یک جمله: هر پله بالاتر، کنترل بیشتری به شما می دهد و همان مقدار مسئولیت را هم روی دوشتان می گذارد. این جمله دوم است که در تبلیغ ها گم می شود.
روی یک سرور اشتراکی، ده ها سایت روی یک ماشین می نشینند و لایه های زیرین را کس دیگری نگه می دارد. شما فقط فایل و پایگاه داده دارید. ارزان است و برای بیشتر سایت های کوچک کافی، و عیبش این است که همسایه شلوغ روی شما اثر می گذارد و تنظیمی که می خواهید ممکن است اصلا در دسترستان نباشد. روی یک سرور مجازی، یک ماشین فیزیکی به چند ماشین مستقل تقسیم شده و سهم شما تضمین شده است؛ در عوض سیستم عامل مال شماست و به روز نگه داشتنش هم. سرور اختصاصی کل جعبه است، با همه توانش و همه مسئولیتش. و ابری بیشتر از اینکه یک نوع سخت افزار باشد، یک مدل تحویل است: منابع را ساعتی برمی دارید و پس می دهید، که برای باری که ناگهان بالا و پایین می رود ساخته شده.
موضع ما بعد از سال ها میزبانی سایت مشتری ها: تقریبا هیچ کس به خاطر «قدرت» به سرور مجازی نیاز پیدا نمی کند. دلیل واقعی مهاجرت معمولا یکی از این دوتاست: تنظیمی لازم شده که روی هاست اشتراکی وجود ندارد، یا همسایه ها آنقدر شلوغ شده اند که رفتار سایت غیرقابل پیش بینی شده. اگر هیچ کدام از این دو اتفاق نیفتاده، پول بیشتر معمولا سرعت بیشتری نمی خرد.
و مرز این توصیه که صریح بگوییم: هزینه سرور مجازی فقط اجاره ماهانه اش نیست، وقت کسی است که آن را به روز نگه می دارد. اگر آن آدم وجود ندارد، سرور مجازی بدون مراقبت از هاست اشتراکی خطرناک تر است، چون به روز نگه داشتنش دیگر کار کسی نیست. انتخاب و خرید خود میزبانی موضوع این درس نیست و در راهنمای انتخاب هاست و مقاله هاست اشتراکی باز شده است.
هر پله، همان قدر که کنترل می دهد مسئولیت هم می دهد
-
۱
اشتراکی
شما فقط فایل و پایگاه داده دارید. همه لایه های زیرین کار کس دیگری است، و همسایه شلوغ هم مشکل کس دیگری است تا وقتی روی شما اثر بگذارد.
-
۲
مجازی
سهم شما تضمین شده و تنظیم ها دست خودتان است. در عوض سیستم عامل و به روز نگه داشتنش هم از امروز مال شماست.
-
۳
اختصاصی
کل جعبه مال شماست و هیچ کس دیگری رویش نیست. هزینه اش هم کل جعبه است، چه استفاده کنید چه نه.
-
۴
ابری
بیشتر یک مدل تحویل است تا یک نوع سخت افزار: منابع را ساعتی برمی دارید و پس می دهید. برای باری که ناگهان بالا و پایین می رود ساخته شده، نه برای سایتی که ترافیکش ثابت است.
این پلکان یک ترتیب رشد نیست و بالا رفتن از آن هدف نیست. بیشتر سایت ها روی پله اول درست کار می کنند و بالا رفتن بی دلیل فقط کار نگه داری را اضافه می کند.
چرا یک سرور از کار می افتد؟
تصور رایج این است که پردازنده پر می شود. در عمل تقریبا هیچ وقت این نیست. چیزی که تمام می شود ظرفیت همزمانی است: تعداد کارگرهایی که اجازه دارند در یک لحظه کد سایت را اجرا کنند.
روی همین سرور این عدد تنظیم شده و بیست است. یعنی در هر لحظه حداکثر بیست درخواست می توانند وارد لایه برنامه شوند و بیست و یکمی باید صبر کند. حالا فرض کنید هر کدام از آن بیست تا به جای صد میلی ثانیه، سه ثانیه طول بکشند، چون یک پرس و جوی سنگین یا یک سرویس بیرونی کند شده. ظرفیت شما ناگهان از دویست درخواست در ثانیه به هفت تا سقوط می کند، بدون اینکه پردازنده حتی گرم شده باشد. صف رشد می کند، زمان انتظار بالا می رود و از بیرون این دقیقا شبیه «سرور خوابید» به نظر می رسد.
یک سقف دوم هم هست که کمتر کسی می شناسد و همان جا نوشته شده: هر درخواست حداکثر ۱۸۰ ثانیه وقت دارد و بعد بی رحمانه قطع می شود. این محافظ خوبی است، چون یک درخواست خراب نمی تواند تا ابد یک کارگر را نگه دارد. ولی همین باعث می شود کارهای طولانی مثل گرفتن نسخه پشتیبان یا وارد کردن یک فایل بزرگ، درست وسط کار قطع شوند و پیام خطای روشنی هم ندهند. اگر کاری همیشه حدود سه دقیقه بعد شکست می خورد، دنبال باگ نگردید؛ به سقف خورده اید.
نتیجه عملی این دو عدد یک قاعده ساده است: سریع کردن صفحه ها فقط تجربه کاربر را بهتر نمی کند، ظرفیت سرور را هم چند برابر می کند، چون هر کارگر زودتر آزاد می شود. برای همین کش کردن صفحه، که در بخش قبل تفاوتش را دیدید، بیش از آنکه یک بهینه سازی سرعت باشد یک تصمیم ظرفیت است.
چه چیزی وظیفه سرور نیست؟
این بخش برای این نوشته شده که رایج ترین پول دور ریختن در این حوزه را جلویش را بگیرد. سرور قوی تر یک صفحه سنگین را سبک نمی کند. اگر صفحه ای سه مگابایت تصویر بارگذاری می کند و بیست اسکریپت خارجی صدا می زند، دو برابر کردن پردازنده سرور تقریبا هیچ چیزی را تغییر نمی دهد، چون گلوگاه اصلا آنجا نیست. سرور فقط مسئول این است که اولین بایت را زود بفرستد؛ بقیه کار در مرورگر بازدیدکننده اتفاق می افتد.
سه چیز دیگر هم وظیفه سرور نیستند و مرتب به گردنش انداخته می شوند. امنیت کد سایت: سروری که به روز است هنوز می تواند یک افزونه آسیب پذیر را اجرا کند. کیفیت پایگاه داده: یک پرس و جوی بد روی سخت افزار بهتر فقط کمی سریع تر بد است. و پشتیبان گیری: هیچ سروری به خودی خود از خودش نسخه پشتیبان نمی گیرد، و این جمله ای است که معمولا وقتی فهمیده می شود که دیگر دیر است.
پس ترتیب درست کار این است: اول بفهمید کندی کجاست، بعد پول خرج کنید. اگر گلوگاه ساخته شدن صفحه است، کش و پایگاه داده جواب می دهند؛ اگر گلوگاه چیزی است که در مرورگر اتفاق می افتد، هیچ سروری کمکتان نمی کند و کار در مسیر افزایش سرعت سایت دنبال می شود.
مسیر سریع با هوش مصنوعی
راه معمولی فهمیدن اینکه «سرور کند است یا سایت»، حدس زدن است و بعد عوض کردن هاست. راه سریع این است که دو اندازه گیری ساده بگیرید که خودشان جواب را در خود دارند، و مدل زبانی فقط آنها را برایتان بخواند. کل کار دو دقیقه طول می کشد و نتیجه اش این است که می دانید کدام لایه وقت را خورده، نه اینکه چه چیزهایی ممکن است مقصر باشند.
- زمان تا اولین بایت را برای صفحه عادی بگیرید، پنج بار، و کمترین را بردارید: curl -s -o /dev/null -w "%{time_starttransfer}\n" https://example.com/. کمترین را می گیریم چون میانگین را یک نوسان شبکه خراب می کند.
- همان را با یک پارامتر بی معنی تکرار کنید، مثل ?x=1234، تا کش صفحه دور زده شود و برنامه مجبور شود صفحه را واقعا بسازد. حالا دو عدد دارید و اختلافشان دقیقا هزینه لایه برنامه است.
- هدرهای هر دو را هم بردارید (curl -sI)، چون همان جا نوشته شده که کدام لایه جواب داده است. سپس هر چهار تکه را با دستور زیر بدهید. مدل سریع و ارزان کافی است؛ انتخاب امروزی هر رده در مرجع هوش مصنوعی نگه داشته می شود.
- قبل از هر خرید، جواب را با بخش «چه چیزی وظیفه سرور نیست» بسنجید. اگر اختلاف دو عدد کوچک بود، گلوگاه اصلا روی سرور نیست و عوض کردن هاست پول دور ریختن است.
نسخه آماده کپی
نقش تو کارشناس زیرساخت وب است. فقط از روی داده های زیر قضاوت کن و هیچ چیزی از حافظه اضافه نکن.
نشانی: {نشانی صفحه}
الف) زمان تا اولین بایت، صفحه عادی، کمترین از پنج بار: {عدد} ثانیه
ب) زمان تا اولین بایت، همان صفحه با پارامتر بی معنی، کمترین از پنج بار: {عدد} ثانیه
هدرهای «الف»:
{اینجا بچسبانید}
هدرهای «ب»:
{اینجا بچسبانید}
چهار چیز بنویس:
۱. اختلاف «ب» منهای «الف» چقدر است، و این اختلاف مال کدام لایه است.
۲. آیا «الف» از یک کش صفحه جواب گرفته است؟ هدری را که این را نشان می دهد نقل کن. اگر چنین هدری نیست بنویس «معلوم نیست».
۳. با توجه به این دو عدد، گلوگاه در ساختن صفحه است یا نه. یک جمله، با دلیل.
۴. اگر گلوگاه در ساختن صفحه است، دو کار به ترتیب اثر بنویس که روی همین سرور قابل انجام باشند و به تغییر میزبانی نیاز نداشته باشند.
قاعده ها: هیچ هدری را که در متن نیست ننویس. عدد جدیدی نساز. اگر داده ها برای یکی از بندها کافی نیستند، بنویس چه اندازه گیری دیگری لازم است.
قبل از اعتماد به خروجی: سه چیز را هرگز نچسبانید: فایل پیکربندی سایت که رمز پایگاه داده در آن است، پیکربندی وب سرور که مسیرها و نشانی های داخلی را لو می دهد، و لاگ خام که معمولا نشانی و نشست کاربران واقعی در آن است. برای این کار هیچ کدامشان لازم نیستند؛ دو عدد و دو دسته هدر کافی است و همین محدود بودن ورودی، نصف ارزش این روش است.
هوش مصنوعی در این کار
در این موضوع مدل زبانی چیزی را ارزان کرده که قبلا گران بود: خواندن. یک تکه پیکربندی ناآشنا یا یک خط لاگ که معنی اش را نمی دانید، در چند ثانیه به فارسی توضیح داده می شود و همین یک قدم، فاصله بین «نمی دانم اینجا چه خبر است» و «می دانم دنبال چه بگردم» را حذف می کند. اما جایی که کار به دست زدن به سرور می رسد، حافظه یک مدل جای مستندات همان نسخه ای که شما نصب کرده اید را نمی گیرد.
ابزارهایی که واقعا کمک می کنند
- Claude برای خواندن خروجی خام دستورها و توضیح خط به خط یک پیکربندی خوب کار می کند، و همین دو کار بیشترین ارزش را در این درس دارند. ایران در فهرست کشورهای پشتیبانی شده انتروپیک نیست، پس راه رسمی ثبت نام و پرداخت وجود ندارد.
- Gemini Notebook ترفند واقعی این درس همین است: مستندات رسمی همان نسخه ای که نصب کرده اید را بارگذاری کنید و سوال را از داخل همان سند بپرسید. جواب از متن سازنده می آید، پس نام یک تنظیم دیگر حدس نیست. روی حساب گوگل کار می کند و ایران در فهرست مناطق در دسترس نیست.
کجا نتیجه معکوس می دهد
دو خطر، و هر دو در همین موضوع رخ می دهند. اول، آنچه می چسبانید. فایل پیکربندی یک سایت وردپرسی رمز پایگاه داده اش را در خودش دارد و پیکربندی وب سرور نقشه کامل مسیرهای داخلی است؛ اینها برای عیب یابی به نظر بی ضرر می آیند و نیستند. گوگل در صفحه خودش درباره داده های جمنای صریحا می گوید اطلاعات محرمانه را وارد نکنید، یعنی خود سازنده هم این را یک مرز واقعی می داند. دوم، تنظیمی که وجود ندارد. مدل مسیر یک دستور یا نام یک گزینه پیکربندی را با اطمینان کامل می گوید و آن گزینه در نسخه ای که شما نصب کرده اید نیست یا معنی دیگری دارد؛ انتروپیک خودش این ساختن با اطمینان را در مستنداتش توهم می نامد و راه های کم کردنش را می نویسد. روی یک سرور زنده هزینه این خطا با هزینه یک جواب اشتباه در یک گفتگو فرق دارد، چون سایت پایین می آید. موضع ما ساده است: مفهوم را از مدل بپرسید، نام دقیق تنظیم را از مستندات همان نسخه، و هیچ فرمانی را که کارش را نمی فهمید روی سرور زنده اجرا نکنید.
منبع ها: Google: Gemini Apps privacy and data Anthropic: reduce hallucinations Anthropic: supported countries Google: where Gemini Apps are available
حد این توصیه
این درس مفهوم را می سازد و از شما مدیر سرور نمی سازد. نصب و سخت کردن یک سرور، دیوار آتش، بروزرسانی و نظارت هر کدام کار مستقل خودشان اند و اینجا نیامده اند. انتخاب و خرید میزبانی هم عمدا بیرون مانده و در راهنمای انتخاب هاست باز شده است. و مرز عددها را صریح بگوییم: هر رقمی که اینجا آمده از پیکربندی و اندازه گیری همین یک ماشین می آید. تعداد کارگرها، سقف زمانی و نسخه ها روی هر سرور دیگری فرق دارند و مقایسه مستقیمشان با سرور شما کار درستی نیست؛ چیزی که منتقل می شود روش است، نه رقم.
از تجربه خود ما
همه چیزی که در این درس آمده از پیکربندی و اندازه گیری سروری است که همین صفحه را به شما داد، در ۱۶ شهریور ۱۴۰۵. لایه ها اینها هستند: nginx نسخه ۱.۲۹.۴ به عنوان وب سرور، PHP نسخه ۸.۵.۲ به عنوان مفسر، MariaDB نسخه ۱۰.۱۱.۱۰ به عنوان پایگاه داده و Redis به عنوان حافظه موقت. وب سرور و مفسر از یک فایل سوکت روی خود دیسک با هم حرف می زنند و نه از شبکه، و تنظیم پایگاه داده روی localhost است. سقف همزمانی لایه برنامه بیست کارگر است و سقف زمانی هر درخواست ۱۸۰ ثانیه؛ هر دو در پیکربندی نوشته شده اند و حدس نیستند. و اندازه گیری سرعت: صفحه اول این سایت از فایل آماده در بهترین حالت ۲۳ میلی ثانیه و همان صفحه وقتی مجبور به ساخته شدن شود در بهترین حالت ۱۳۹ میلی ثانیه تا اولین بایت طول می کشد، هر کدام کمترین از پنج بار و مستقیم از خود سرور گرفته شده تا شبکه توزیع محتوا در نتیجه دخالت نکند.
سوال هایی که واقعا پرسیده می شوند
سرور من چند بازدیدکننده همزمان را تحمل می کند؟
این عدد از پردازنده در نمی آید، از یک تقسیم ساده در می آید: تعداد کارگرها تقسیم بر زمانی که هر درخواست طول می کشد. با بیست کارگر و صد میلی ثانیه برای هر درخواست، حدود دویست درخواست در ثانیه؛ با همان بیست کارگر و دو ثانیه برای هر درخواست، ده تا. برای همین کوتاه کردن زمان هر درخواست، از خرید سرور بزرگ تر موثرتر است.
چرا سایتم روی هاست جدید سریع تر نشد؟
چون احتمالا گلوگاه روی سرور نبوده است. سرور فقط زمان تا اولین بایت را تعیین می کند؛ اگر کندی از حجم تصویرها و اسکریپت هایی باشد که در مرورگر اجرا می شوند، بهترین سرور دنیا هم آن را عوض نمی کند. آزمایشش همان دو اندازه گیری بخش مسیر سریع است: اگر اختلاف صفحه کش شده و کش نشده کوچک باشد، پول را جای اشتباهی خرج کرده اید.
فرق سرور و هاست چیست؟
سرور ماشین است و هاست سرویسی است که روی آن می خرید. وقتی هاست می خرید در واقع سهمی از یک سرور را با نگه داری و پشتیبانی اش اجاره می کنید، نه خود ماشین را. برای همین است که «هاست خریدم ولی به تنظیمات سرور دسترسی ندارم» تناقض نیست؛ همان چیزی است که خریده اید.