دسته بندی:

آموزش کانفیگ آپاچی با برنامه EasyApache برای هاست اشتراکی (نسخه‌های ۳ و ۴)

اجرای EasyApache در هاست

روی یک سرور cPanel نمی‌شود آپاچی و PHP را دست‌نخورده رها کرد؛ هر ماژول یا افزونه‌ای که سایت‌های روی هاست لازم دارند باید از مسیر EasyApache به وب‌سرور اضافه شود. گرفتاری همیشگی هم همین‌جاست: یک صفحه بلند پر از تیک، بدون اینکه معلوم باشد کدام گزینه واقعاً لازم است و کدام فقط سرور را سنگین می‌کند. در ادامه یک کانفیگ عمومی و امتحان‌پس‌داده برای هاست اشتراکی را مرحله‌به‌مرحله می‌بینید و بعد معادل امروزی هر مرحله در EasyApache 4.

اول ببینید کدام نسل EasyApache روی سرور است

آموزش کلاسیکی که در ادامه می‌آید مربوط به EasyApache 3 است؛ همان نسلی که آپاچی و PHP را از سورس کامپایل می‌کرد و هر تغییر کوچک، یک بیلد کامل می‌خواست. نسخه‌های امروزی cPanel فقط EasyApache 4 دارند و EA3 سال‌هاست به پایان پشتیبانی رسیده است. ساده‌ترین راه‌های تشخیص:

  • در WHM منوی Software را باز کنید؛ اگر گزینه EasyApache 4 را دیدید، سرور شما EA4 است.
  • یا از SSH محل نصب آپاچی را ببینید: در EA4 کانفیگ آپاچی در مسیر /etc/apache2/ قرار دارد، در حالی که EA3 آپاچی را در /usr/local/apache/ نصب می‌کرد.

اگر سرور شما EA4 است، مفاهیم این راهنما (انتخاب نسخه، MPM، ماژول‌های لازم) همچنان معتبر است اما مسیر اجرا فرق می‌کند و باید بخش «همین کارها در EasyApache 4» را در ادامه بخوانید. نمونه‌ای دیگر از تفاوت این دو نسل و روش درست نصب ماژول در نسخه‌های جدید را در آموزش نصب GeoIP در سی پنل توضیح داده‌ایم.

انتخاب پروفایل شروع (EasyApache 3)

ابتدا وارد مدیریت هاست WHM شده و با اجرای برنامه EasyApache با این صفحه مواجه می‌شویم (اگر هنوز پنل روی سرور نصب نیست، ابتدا راهنمای نصب سی پنل را دنبال کنید):

در این مرحله از کانفیگ آپاچی باید انتخاب کنید که چه خواسته‌ای از سیستم و سرور خود دارید. آیا مایل به استفاده از تنظیمات قبلی و ایجاد تغییرات جدید در آن هستید؟ در این صورت گزینه پیش‌فرض مناسب شماست. آیا مایل به شروع کانفیگ همه چیز از صفر هستید؟ در این صورت گزینه Basic بهترین انتخاب برای شماست. سایر موارد مناسب راه‌اندازی یک سرور برای هاست اشتراکی نیست و بنابراین به آن‌ها نمی‌پردازیم. پس از انتخاب این قسمت روی دکمه Start customizing based on profile کلیک کنید.

انتخاب ورژن آپاچی

در این مرحله باید ورژن وب‌سرور آپاچی مورد نظر خود را انتخاب کنید. همین آپاچی، هسته پشته نرم‌افزاری هاست لینوکس است و معمولاً آخرین ورژن پایدار آن توصیه می‌شود.

در دوره‌ای که این آموزش نوشته شد، تازه‌ترین گزینه فهرست Apache 2.4.4 بود و WHM/cPanel آن را با برچسب EXPERIMENTAL نشان می‌داد؛ یعنی نسخه بتا نبود و نسخه اصلی محسوب می‌شد، ولی به دلیل جدید بودن احتمال کانفلیکت با سایر سرویس‌ها وجود داشت. توصیه آن زمان این بود که اگر حرفه‌ای نیستید روی آپاچی ۲٫۲٫۲۴ بمانید تا خود WHM/cPanel نسخه ۲٫۴ را رسماً توصیه کند.

وقتی آپاچی ۲٫۴٫۴ بالاخره به EasyApache اضافه شد

اضافه شدن آپاچی ۲٫۴٫۴ به فهرست ورژن‌های قابل انتخاب EasyApache پایان یک انتظار طولانی بود: ماه‌ها از ورود آپاچی ۲٫۴ به بازار وب‌سرورها گذشته بود و در هر آپدیت و ورژن جدید سی‌پنل، جای آن در EasyApache خالی می‌ماند. چیزی که در همان نگاه اول روی سرورهای ما مشهود بود، افت محسوس لود سرور پس از ارتقا به آپاچی ۲٫۴٫۴ بود، به‌ویژه زیر ترافیک سنگین. جمع‌بندی ما از همان دوره این بود که با آپاچی ۲٫۴ روی سرور cPanel عملاً نیازی به لایه کش و پروکسی nginx نیست و nginx حداکثر کمی سرعت پاسخ‌دهی به درخواست‌ها را بهتر می‌کند، نه بیشتر. آن مکث طولانی سی‌پنل برای گنجاندن ۲٫۴٫۴ در EasyApache هم بی‌دلیل نبود؛ خروجی نهایی بدون مشکل خاصی با WHM/cPanel سازگار شد.

اما توصیه انتخاب نسخه امروز کاملاً برعکس شده است. خط ۲٫۲ آپاچی سال‌هاست به پایان عمر (EOL) رسیده و دیگر هیچ وصله امنیتی برای آن منتشر نمی‌شود؛ نگه داشتن آن روی یک سرور هاستینگ اشتراکی یعنی پذیرفتن آسیب‌پذیری‌های وصله‌نشده. EasyApache 4 هم اصلاً آپاچی ۲٫۲ ندارد و فقط بسته‌های ea-apache24 را عرضه می‌کند. پس روی سرورهای امروزی، «انتخاب نسخه آپاچی» عملاً موضوعیت ندارد و تنها گزینه، آپاچی ۲٫۴ است. اگر دنبال روش نصب یا ارتقای آپاچی ۲٫۴ روی سرور cPanel امروزی هستید، بخش «همین کارها در EasyApache 4» در ادامه همان کار را شرح می‌دهد.

مهاجرت از آپاچی ۲٫۲ به ۲٫۴ روی cPanel: چه چیزی می‌شکند

اگر سروری در دست دارید که هنوز روی نسل قدیم مانده، این نکته‌ها را پیش از ارتقا در نظر بگیرید:

  • دستورهای دسترسی در .htaccess عوض شده‌اند. شایع‌ترین دلیل خطای ۵۰۰ یا ۴۰۳ پس از مهاجرت، همین است. نحو قدیمی Order/Allow/Deny متعلق به آپاچی ۲٫۲ است و در ۲٫۴ جای خود را به Require داده است.
  • افزونه‌ها و پلاگین‌هایی که خودشان .htaccess می‌نویسند (کش، شتاب‌دهنده، امنیتی) اگر قدیمی باشند همان نحو ۲٫۲ را تولید می‌کنند. در همان دوره مهاجرت، یکی از مشتریان هاست اشتراکی ما ناسازگاری یک افزونه شتاب‌دهنده HTTP وردپرس را با آپاچی ۲٫۴٫۴ گزارش کرد. راه‌حل درست، به‌روزرسانی یا کنار گذاشتن افزونه است، نه بازگشت به آپاچی قدیمی.
  • پروکسی nginx غیررسمی. آن زمان پلاگین nginxcp با آپاچی ۲٫۴٫۴ مشکل داشت (هرچند راه‌هایی برای رفعش وجود داشت). امروز اصلاً سراغ آن نروید: cPanel خودش پروکسی معکوس رسمی nginx را با بسته ea-nginx ارائه می‌کند که از داخل EasyApache 4 نصب و مدیریت می‌شود.
  • لایه‌های کش مستقل. در همان مهاجرت، Varnish، APC و Memcached با کانفیگ‌های قبلی‌شان هیچ مشکلی با آپاچی ۲٫۴٫۴ نداشتند و بدون دست خوردن فایل‌های کانفیگ به کار خود ادامه دادند. Varnish و Memcached امروز هم همین وضع را دارند، اما APC دیگر داستان دیگری است: کش اپ‌کد APC مربوط به دوره PHP 5 است و از PHP 5.5 به بعد OPcache به‌صورت داخلی در خود PHP وجود دارد. امروز به‌جای APC باید OPcache (کش اپ‌کد) و در صورت نیاز APCu (کش داده کاربر) را فعال کنید.

تفاوت نحو کنترل دسترسی را حتماً در .htaccessها و ویرچوال‌هاست‌های سفارشی خود اصلاح کنید. هشدار: قطعه‌های «مسدود کردن» زیر را کورکورانه در .htaccess ریشه سایت نگذارید؛ Require all denied کل آن مسیر را برای همه می‌بندد و باید فقط داخل همان <Directory> یا <Files>ای به کار برود که واقعاً قصد بستنش را دارید. پیش از تغییر هم از فایل نسخه پشتیبان بگیرید.

# آپاچی 2.2 — منسوخ
Order allow,deny
Allow from all

# آپاچی 2.4 — نحو درست امروز
Require all granted


# مسدود کردن همه در 2.2
Order allow,deny
Deny from all

# مسدود کردن همه در 2.4
Require all denied


# اجازه فقط به یک IP در 2.4
Require ip 192.0.2.10

آپاچی ۲٫۴ ماژول mod_access_compat را دارد که نحو قدیمی را همچنان قبول می‌کند، اما به آن تکیه نکنید؛ این ماژول فقط برای دوره گذار است و ترکیب کردن دو نحو در یک فایل رفتار غیرقابل پیش‌بینی می‌سازد.

بعد از انتخاب ورژن آپاچی روی دکمه آبی‌رنگ Next Step کلیک کنید تا وارد صفحه انتخاب ورژن PHP شوید:

انتخاب ورژن PHP

انتخاب آخرین ورژن پایدار PHP همواره از نظر امنیتی توصیه می‌شود. متن اصلی این آموزش از نسخه‌های ۵٫۲ و ۵٫۳ حرف می‌زد و توصیه‌اش این بود که به‌جای ۵٫۲ روی آخرین پایدار ۵٫۳ بمانید؛ امروز اما کل شاخه PHP 5 سال‌هاست به پایان پشتیبانی رسیده و روی هیچ سرور هاستینگی نباید فعال باشد. معیار درست این است که همیشه روی یکی از نسخه‌هایی بمانید که هنوز در چرخه پشتیبانی امنیتی رسمی PHP قرار دارد و برنامه‌های مشتریان با آن سازگارند.

نکته مهم EasyApache 3 این بود که هر بار فقط یک نسخه PHP روی کل سرور کامپایل می‌شد. این محدودیت در EA4 برداشته شده و می‌توانید چند نسخه PHP را کنار هم نصب کنید و در WHM از بخش MultiPHP Manager برای هر دامنه نسخه جداگانه تعیین کنید. تنظیم مقادیر php.ini روی هاست اشتراکی هم از MultiPHP INI Editor انجام می‌شود که در راهنمای upload_max_filesize توضیح داده شده است.

بعد از انتخاب ورژن PHP روی Next Step کلیک کنید تا وارد صفحه اصلی تنظیمات و کانفیگ آپاچی توسط EasyApache شوید. برای نمایش تمام تنظیمات ممکن، از انتهای صفحه روی دکمه Exhaustive Options List کلیک کنید تا صفحه بلند و طولانی پر از امکانات مختلف برای انتخاب و کامپایل باز شود.

انتخاب ماژول‌ها و افزونه‌ها

بهترین کانفیگ آپاچی ارتباط مستقیم با نوع کاربری شما و سخت‌افزار سرور دارد. بنابراین در اینجا فقط یک کانفیگ جنرال و امتحان‌پس‌داده را مرور می‌کنیم. گزینه‌های زیر را تیک بزنید تا در حین عملیات کامپایل، PHP و آپاچی با آن‌ها ساخته شوند. درباره گزینه MPM Worker که در همین فهرست می‌بینید و تفاوتش با سایر حالت‌ها، مفهوم MPM در Apache و انتخاب آن را بخوانید:

Cache

Deflate

Disk Cache

Expires

Mod FCGID

Fileprotect

Headers

MPM Worker

Proxy

UniqueId

Watchdog

EAccelerator for PHP

IonCube Loader for PHP

Mod Security

Suhosin for PHP

Zend Guard Loader for PHP

Bcmath

CGI

Calendar

CurlSSL

FTP

GD

Gettext

Iconv

Imap

Magic Quotes

Mbregex

Mbstring

Mcrypt

Mysql

MySQL "Improved" extension

Openssl

PDO

PDO MySQL

POSIX

Patch Info Check

Pear

PGsql

Phar

SOAP

SQLite3

Safe PHP CGI

Sockets

System Timezone

TTF (FreeType)

Zlib

Save my profile with appropriate PHP 5 options set so that it is compatible with cpphp

Reset Apache Config to default – any customizations will be lost (this session only)

چرا MPM Worker به همراه Mod FCGID انتخاب شده است

این دو گزینه تصادفی کنار هم نیامده‌اند. ماژول mod_php (حالت DSO) thread-safe نیست و فقط با MPM prefork کار می‌کند؛ prefork هم برای هر اتصال یک پروسه کامل نگه می‌دارد و روی سرور شلوغ حافظه را می‌بلعد. به همین دلیل وقتی MPM worker (یا در آپاچی ۲٫۴، MPM event) را انتخاب می‌کنید، اجرای PHP باید از مسیر جداگانه‌ای مثل FCGID، suPHP یا PHP-FPM انجام شود، نه DSO. روی EasyApache 4 امروز، ترکیب استاندارد و توصیه‌شده MPM event به همراه PHP-FPM است؛ هندلر هر نسخه PHP را از WHM و بخش MultiPHP Manager تعیین می‌کنید.

کدام موارد این فهرست دیگر منسوخ‌اند

اگر امروز روی سروری نشسته‌اید که هنوز چنین فهرستی نشان می‌دهد، این‌ها را تیک نزنید یا معادل امروزی‌شان را به کار ببرید:

  • Magic Quotes — در PHP 5.4 به کلی از زبان حذف شد. اگر کدی به آن وابسته است، همان کد باید اصلاح شود.
  • Mysql (اکستنشن قدیمی ext/mysql و توابع mysql_*) — در PHP 7 حذف شد. جایگزین‌ها mysqli (همان MySQL “Improved” extension در این فهرست) و PDO MySQL هستند.
  • Mcrypt — در PHP 7.1 منسوخ و در ۷٫۲ از هسته PHP خارج شد. برای رمزنگاری از OpenSSL یا Sodium استفاده کنید.
  • EAccelerator — پروژه‌اش متوقف شده است. از PHP 5.5 به بعد OPcache داخل خود PHP قرار دارد و همان را فعال کنید.
  • Suhosin — عملاً برای PHP 7 و ۸ نگهداری نمی‌شود. سخت‌سازی امنیتی را با تنظیمات php.ini، ModSecurity و جداسازی کاربران انجام دهید.
  • Zend Guard Loader — مربوط به دوره PHP 5 است. برای کدهای انکودشده امروزی معمولاً ionCube Loader لازم می‌شود که هنوز نگهداری می‌شود.
  • Pear — هنوز بسته دارد ولی مدیریت وابستگی‌های PHP امروز با Composer انجام می‌شود.
  • Safe PHP CGI، Fileprotect، Watchdog و Patch Info Check — این‌ها گزینه‌های مخصوص خودِ EasyApache 3 بودند و در EA4 چنین تیک‌هایی وجود ندارد؛ کارکردشان امروز از بخش‌های دیگر cPanel (تنظیمات امنیتی پنل و سرویس‌منیجر) مدیریت می‌شود.

بقیه موارد فهرست — Cache، Disk Cache، Deflate، Expires، Headers، Proxy، Mod FCGID، UniqueId، Mod Security، ionCube، CGI، Bcmath، Calendar، CurlSSL، FTP، GD، Gettext، Iconv، Imap، Mbregex، Mbstring، OpenSSL، PDO، PDO MySQL، POSIX، PGsql، Phar، SOAP، SQLite3، Sockets، System Timezone، FreeType و Zlib — همچنان کاربرد دارند و در EA4 به‌صورت بسته‌های جداگانه در دسترس‌اند.

شروع بیلد و اجرای EasyApache 3 از SSH

حالا روی دکمه Save and Build کلیک کنید تا عملیات کامپایل و نصب مجدد آغاز شود. این فرایند می‌تواند ۱۵ دقیقه یا بیشتر زمان ببرد، پس صبر کنید تا کامپایل مجدد تا آخر انجام شود. توجه کنید که در پایان بیلد، آپاچی ری‌استارت می‌شود و سایت‌ها لحظاتی از دسترس خارج می‌شوند؛ بنابراین این کار را در ساعت کم‌ترافیک انجام دهید و پیش از شروع، پروفایل فعلی سرور را ذخیره کنید تا در صورت مشکل بتوانید به همان ترکیب قبلی برگردید.

اگر رم سرور کم است یا حافظه‌اش پر است، بهتر است تمام مراحل بالا را به‌جای رابط WHM از محیط SSH انجام دهید. دلیل دوم هم این است که اگر مرورگر یا نشست WHM قطع شود ممکن است بیلد نیمه‌کاره بماند؛ پس اجرای آن از SSH و ترجیحاً داخل یک نشست screen یا tmux امن‌تر است:

/scripts/easyapache

دقت کنید مسیر درست /scripts/easyapache است (نه /scritps/) و این دستور فقط روی سرورهای نسل EasyApache 3 وجود دارد.

همین کارها در EasyApache 4

EA4 دیگر چیزی را کامپایل نمی‌کند. آپاچی، PHP و همه ماژول‌ها به شکل بسته آماده عرضه می‌شوند (RPM روی خانواده RHEL و DEB روی cPanel مبتنی بر اوبونتو)، پس آنچه قبلاً ۱۵ دقیقه بیلد می‌خواست حالا در چند ثانیه نصب می‌شود. مسیر کار در WHM:

  • به WHM » Software » EasyApache 4 بروید.
  • یا یکی از پروفایل‌های آماده را با Provision اعمال کنید، یا روی Customize در بخش Currently Installed Packages کلیک کنید.
  • در حالت Customize، تب‌های Apache MPM، Apache Modules، PHP Versions، PHP Extensions و Additional Packages را یکی‌یکی رد کنید و در پایان با Review فهرست تغییرات را ببینید و Provision بزنید.
  • کانفیگ نهایی خود را به شکل پروفایل ذخیره کنید تا روی سرورهای بعدی عیناً همان ترکیب را نصب کنید و در صورت خرابی، امکان بازگشت داشته باشید.

مرحله Provision هم آپاچی را ری‌استارت می‌کند؛ حذف یک ماژول یا نسخه PHP که سایت‌ها به آن وابسته‌اند بلافاصله باعث خطای سایت می‌شود. پس صفحه Review را کلمه‌به‌کلمه بخوانید و مطمئن شوید چیزی به‌طور ناخواسته در فهرست «حذف» نیفتاده است.

همین کار از SSH هم انجام می‌شود، چون همه چیز بسته‌ای است که با yum یا dnf نصب می‌شود. اول با جست‌وجو نام دقیق بسته را پیدا کنید و بعد نصبش کنید:

# AlmaLinux / Rocky / CloudLinux 8 و 9
dnf search ea-apache24
dnf install ea-apache24-mod_security2

# CentOS 7 و CloudLinux 7 — که خود CentOS 7 هم به پایان پشتیبانی رسیده است
yum search ea-apache24
yum install ea-apache24-mod_security2

روی سرورهای cPanel مبتنی بر اوبونتو، همین بسته‌ها با apt نصب می‌شوند (apt-cache search ea-apache24 و apt install …).

بسته‌های PHP هم از یک الگوی نام‌گذاری ثابت پیروی می‌کنند؛ برای هر نسخه PHP یک خانواده بسته جدا وجود دارد:

# الگو: ea-php<نسخه بدون نقطه>-php-<نام افزونه>
# مثال: نصب افزونه gd برای PHP 8.2
dnf install ea-php82-php-gd

پس از هر تغییر، اول کانفیگ را بازسازی و تست کنید و تنها بعد از سالم بودن تست، سرویس را ری‌استارت کنید:

# بازسازی فایل کانفیگ آپاچی از روی داده‌های cPanel
# هشدار: این دستور httpd.conf را از نو می‌سازد و ویرایش‌های دستی داخل خود
# httpd.conf از بین می‌رود. تنظیمات سفارشی را در فایل‌های Include سفارشی
# cPanel نگه دارید و پیش از اجرا از فایل فعلی نسخه پشتیبان بگیرید.
/scripts/rebuildhttpdconf

# بررسی نحو کانفیگ آپاچی — تا وقتی Syntax OK نگرفتید ری‌استارت نکنید
httpd -t

# ری‌استارت آپاچی روی سرور cPanel
/scripts/restartsrv_httpd

# فهرست ماژول‌های لودشده برای اطمینان از نصب ماژول جدید
httpd -M

روی سرور cPanel همیشه از اسکریپت‌های خود cPanel برای ری‌استارت استفاده کنید تا سرویس‌مانیتور پنل از تغییر باخبر شود. روی سرورهای بدون کنترل‌پنل، دستورهای قدیمی service httpd restart و /etc/init.d/httpd restart جای خود را به systemd داده‌اند:

# خانواده RHEL: AlmaLinux، Rocky، CloudLinux
systemctl restart httpd
systemctl status httpd

# اوبونتو و دبیان
systemctl restart apache2
systemctl status apache2

جمع‌بندی

آنچه خواندید یک کانفیگ عمومی آپاچی در cPanel برای راه‌اندازی سرور هاستینگ اشتراکی با تنظیمات استاندارد بود و بر حسب نیاز می‌توان تغییرات بسیار زیادی در آن داد. سه نکته را به خاطر بسپارید: انتخاب نسخه آپاچی امروز عملاً موضوعیت ندارد و فقط ۲٫۴ در دسترس است؛ MPM و هندلر PHP باید با هم سازگار انتخاب شوند؛ و هر فهرست ماژولی که از دوره EasyApache 3 به یادگار مانده باید با معادل‌های امروزی بازبینی شود، نه اینکه عیناً تیک بخورد.