سرور مجازي وب Apache از هاست هاي مجازي براي مديريت دامنه هاي متعدد در يك مثال استفاده مي كند. به طور مشابه ، PHP-FPM از يك Daemon براي مديريت چندين نسخه PHP در يك نمونه واحد استفاده مي كند. مي توانيد از Apache و PHP-FPM با هم براي ميزباني چند برنامه وب PHP استفاده كنيد ، هر يك با استفاده از نسخه متفاوت PHP ، همه در يك سرور مجازي يكسان و همه به طور همزمان. اين كار از آن جهت مفيد است كه برنامه هاي مختلف ممكن است به نسخه هاي مختلف PHP نياز داشته باشند ، اما برخي از پشته هاي سرور مجازي ، مانند پشته LAMP كه به طور مرتب پيكربندي شده است ، فقط مي تواند يكي را مديريت كند. تركيب Apache با PHP-FPM نيز يك راه حل مقرون به صرفه تر نسبت به ميزباني هر برنامه به طور خاص است.
PHP-FPM همچنين گزينه هاي پيكربندي براي ورود به سيستم stderr و stdout ، ريستارت اضطراري و spawning روند تطبيقي ​​را ارائه مي دهد ، كه براي سايت هاي داراي بار سنگين مفيد است. در حقيقت ، استفاده از Apache با PHP-FPM يكي از بهترين پشته ها براي ميزباني برنامه هاي PHP است ، به خصوص وقتي صحبت از عملكرد ميشود.
در اين آموزش دو سايت PHP را به صورت يكجا تنظيم خواهيد كرد. هر سايت از دامنه خود استفاده مي كند و هر دامنه نسخه PHP خود را مستقر مي كند. اولي ، site1.your_domain ، PHP 7.0 را مستقر مي كند. دومي ، site2.your_domain ، PHP 7.2 را مستقر مي كند.
پيش نيازها
• يك سرور مجازي Debian 10 با حداقل 1 گيگابايت رم كه طبق راهنماي راه اندازي سرور مجازي اوليه با Debian 10تنظيم شده باشد و شامل كاربر sudo غير ريشه و فايروال تنظيم شده باشد.
• سرور مجازي وب Apache كه با دنبال كردن نحوه نصب وب سرور مجازي Apache در Debian 10تنظيم و پيكربندي شده است.
• نام دامنه تنظيم شده كه به سرور مجازي Debian 10 شما اشاره كند. براي اهداف اين آموزش ، ما از دو زير دامنه استفاده خواهيم كرد كه هر يك با يك ركورد A در تنظيمات DNS ما مشخص شده اند: site1.your_domain و site2.your_domain.
مرحله 1 – نصب PHP نسخه هاي 7.0 و 7.2 با PHP-FPM
با تكميل پيش نيازها، اكنون نسخه هاي PHP 7.0 و 7.2 و همچنين PHP-FPM و چندين پسوند اضافي را نصب خواهيد كرد. اما براي تحقق اين امر ، ابتدا بايد مخزن Sury php را به سيستم خود اضافه كنيد.
ابتدا چندين بسته مورد نياز از جمله curl ، wget و gnupg2 را نصب كنيد:
⦁ $ sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y

بسته هاي فوق به شما امكان مي دهد تا به مخزن Sury php دسترسي پيدا كنيد و اين كار را با اطمينان انجام دهيد. sury php يك مخزن شخص ثالث يا PPA (بايگاني بسته هاي شخصي) است كه PHP 7.4 ، 7.3 ، 7.2 ، 7.1 و 7.0 را براي سيستم عامل Debian ارائه مي دهد. همچنين نسخه هاي به روز تر PHP را نسبت به مخازن رسمي Debian 10 ارائه مي دهد و به شما امكان مي دهد نسخه هاي مختلف PHP را روي همان سيستم نصب كنيد.
سپس ، كليد بسته را وارد كنيد:
⦁ $ wget https://packages.sury.org/php/apt.gpg

⦁ $ sudo apt-key add apt.gpg

اكنون مخزن Sury php را به سيستم خود اضافه كنيد:
⦁ $ echo “deb https://packages.sury.org/php/ $(lsb_release -sc) main” | sudo tee /etc/apt/sources.list.d/php7.list

مخزن را به روز كنيد:
⦁ $ sudo apt-get update -y

سپس ، php7.0 ، php7.0-fpm ، php7.0-mysql ، libapache2-mod-php7.0 و libapache2-mod-fcgid را با دستورات زير نصب كنيد:
⦁ php7.0 ابربسته اي است كه مي تواند براي اجراي برنامه هاي PHP استفاده شود.
⦁ php7.0-fpm مفسر مديريت سريع فرآيند را فراهم مي كند كه به عنوان يك Daemon اجرا مي شود و درخواست هاي سريع / CGI را دريافت مي كند.
⦁ php7.0-mysql PHP را به پايگاه داده MySQL متصل مي كند.
⦁ libapahce2-mod-php7.0 ماژول PHP را براي وب سرور مجازي Apache ارائه مي دهد.
⦁ libapache2-mod-fcgid شامل يك mod_fcgid است كه تعدادي از نمونه هاي برنامه CGI را براي رسيدگي به درخواست هاي همزمان شروع مي كند.
حالا فرايند را براي نسخه PHP 7.2 تكرار كنيد. php7.2 ، php7.2-fpm ، php7.2-mysql و libapache2-mod-php7.2 را نصب كنيد.
⦁ $ sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y

پس از نصب هر دو نسخه PHP ، سرويس php7.0-fpm را شروع كنيد:
⦁ $ sudo systemctl start php7.0-fpm

بعد ، وضعيت سرويس php7.0-fpm را بررسي كنيد:
⦁ $ sudo systemctl status php7.0-fpm

خروجي زير را مشاهده خواهيد كرد:
Output
● php7.0-fpm.service – The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:51:47 UTC; 1min 17s ago
Docs: man:php-fpm7.0(8)
Main PID: 13016 (php-fpm7.0)
Status: “Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec”
Tasks: 3 (limit: 1149)
Memory: 19.1M
CGroup: /system.slice/php7.0-fpm.service
├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13017 php-fpm: pool www
└─13018 php-fpm: pool www

Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager…
Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

با تكرار اين روند ، اكنون سرويس php7.2-fpm را شروع كنيد:
⦁ $ sudo systemctl start php7.2-fpm

و سپس وضعيت سرويس php7.2-fpm را بررسي كنيد:
⦁ $ sudo systemctl status php7.2-fpm

خروجي زير را مشاهده خواهيد كرد:
Output
● php7.2-fpm.service – The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:52:52 UTC; 1min 32s ago
Docs: man:php-fpm7.2(8)
Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite
Main PID: 22204 (php-fpm7.2)
Status: “Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec”
Tasks: 3 (limit: 1149)
Memory: 12.0M
CGroup: /system.slice/php7.2-fpm.service
├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─22205 php-fpm: pool www
└─22206 php-fpm: pool www

Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager…
Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

در آخر ، بايد چندين ماژول را فعال كنيد تا سرويس Apache2 شما بتواند با چندين نسخه PHP كار كند:
⦁ $ sudo a2enmod actions fcgid alias غير مجاز مي باشد_fcgi

⦁ actions براي اجراي اسكريپت هاي CGI بر اساس نوع رسانه يا روش درخواست استفاده مي شود.
⦁ fcgid يك جايگزين با كارايي بالا براي mod_cgi است كه تعداد كافي از نمونه هاي برنامه CGI را براي رسيدگي به درخواست هاي همزمان شروع مي كند.
⦁ alias براي نگاشت قسمت هاي مختلف سيستم فايل ميزبان در درخت سند و هدايت URL ارائه ميشود.
⦁ غير مجاز مي باشد_fcgi به Apache امكان مي دهد تا درخواست ها را به PHP-FPM ارسال كند.
اكنون سرويس Apache را مجدداً راه اندازي كنيد تا تغييرات خود را اعمال كنيد:
⦁ $ sudo systemctl restart apache2

در اين مرحله شما دو نسخه PHP را روي سرور مجازي خود نصب كرده ايد. در مرحله بعد ، براي هر وب سايتي كه مي خواهيد مستقر شويد ، يك ساختار دايركتوري ايجاد خواهيد كرد.
مرحله 2 – ايجاد ساختارهاي ديركتوري براي هر دو وب سايت
در اين بخش ، يك دايركتوري اصلي اسناد و صفحه فهرست براي هر دو وب سايت خود ايجاد مي كنيد.
ابتدا دايركتوري هاي اصلي سند را براي site.your_domain و site2.your_domain ايجاد كنيد:
⦁ $ sudo mkdir /var/www/site1.your_domain

⦁ $ sudo mkdir /var/www/site2.your_domain

به طور پيش فرض ، وب سرور مجازي Apache به عنوان يك كاربر www-data و گروه www-data به كار مي رود. براي اطمينان از مالكيت صحيح و مجوزهاي ديركتوري هاي root وب سايت خود ، دستورات زير را اجرا كنيد:
⦁ $ sudo chown -R www-data:www-data /var/www/site1.your_domain

⦁ $ sudo chown -R www-data:www-data /var/www/site2.your_domain

⦁ $ sudo chmod -R 755 /var/www/site1.your_domain

⦁ $ sudo chmod -R 755 /var/www/site2.your_domain

در مرحله بعد يك فايل info.php را در داخل هر ديركتوري اصلي وب سايت ايجاد مي كنيد. با اين كار اطلاعات نسخه PHP هر وب سايت نمايش داده مي شود. با site1 شروع كنيد:
⦁ $ sudo nano /var/www/site1.your_domain/info.php

خط زير را اضافه كنيد:
/var/www/site1.your_domain/info.php

فايل را ذخيره كنيد و ببنديد. اكنون فايل info.php كه در سايت2 ايجاد كرده ايد را كپي كنيد:
⦁ $ sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

اكنون وب سرور مجازي شما بايد ديركتوري هاي ريشه اسناد را كه هر سايت براي ارائه اطلاعات به بازديد كنندگان نياز دارد در اختيار داشته باشد. در مرحله بعدي ، وب سرور مجازي Apache خود را پيكربندي خواهيد كرد تا با دو نسخه مختلف PHP كار كند.
مرحله 3 – پيكربندي Apache براي هر دو وب سايت
در اين بخش دو فايل پيكربندي ميزبان مجازي ايجاد خواهيد كرد. با اين كار دو وب سايت شما قادر خواهند بود همزمان با دو نسخه مختلف PHP كار كنند.
براي اينكه Apache بتواند اين محتوا را ارائه دهد ، بايد يك فايل ميزبان مجازي با بخشنامه هاي صحيح ايجاد كنيد. به جاي تغيير فايل پيكربندي پيش فرض واقع در /etc/apache2/sites-available/000-default.conf ، دو فايل جديد را در ديركتوري / etc / apache2 / سايتهاي موجود ايجاد خواهيد كرد.
ابتدا يك فايل پيكربندي ميزبان مجازي جديد براي وب سايت site1.your_domain ايجاد كنيد. در اينجا شما Apache را به ارائه محتوا با استفاده از php7.0 هدايت مي كنيد:
⦁ $ sudo nano /etc/apache2/sites-available/site1.your_domain.conf

محتواي زير را اضافه كنيد. اطمينان حاصل كنيد كه مسير ديركتوري وب سايت ، نام سرور مجازي و نسخه PHP با تنظيمات شما مطابقت دارد:
/etc/apache2/sites-available/site1.your_domain.conf


ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all


# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler “غير مجاز مي باشد:unix:/run/php/php7.0-fpm.sock|fcgi://localhost”

ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined

در اين فايل ، DocumentRoot را به دايركتوري جديد و ServerAdmin را به ايميلي كه ادمين سايت your_domain مي تواند به آن دسترسي داشته باشد ، به روز كرده ايد. همچنين ServerName را به روز كرده ايد ، كه دامنه پايه را براي اين پيكربندي ميزبان مجازي ايجاد مي كند ، و يك دستورالعمل SetHandler براي اجراي PHP به عنوان سرور مجازي فرآيند fastCGI اضافه كرده ايد.
فايل را ذخيره كنيد و ببنديد.
در مرحله بعدي ، يك فايل پيكربندي ميزبان مجازي جديد براي وب سايت site2.your_domain ايجاد كنيد. براي استقرار php7.2 اين زير دامنه را مشخص مي كنيد:
⦁ $ sudo nano /etc/apache2/sites-available/site2.your_domain.conf

محتواي زير را اضافه كنيد. دوباره مطمئن شويد كه مسير ديركتوري وب سايت ، نام سرور مجازي و نسخه PHP با اطلاعات منحصر به فرد شما مطابقت دارد:
/etc/apache2/sites-available/site2.your_domain.conf

ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all


# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler “غير مجاز مي باشد:unix:/run/php/php7.2-fpm.sock|fcgi://localhost”

ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined

پس از اتمام فايل را ذخيره و ببنديد. سپس فايل پيكربندي Apache را براي هرگونه خطاي نحوي بررسي كنيد:
⦁ $ sudo apachectl configtest

خروجي زير را مشاهده خواهيد كرد:
Output
Syntax OK
سپس ، هر دو فايل پيكربندي ميزبان مجازي را فعال كنيد:
⦁ $ sudo a2ensite site1.your_domain

⦁ $ sudo a2ensite site2.your_domain

اكنون سايت پيش فرض را غيرفعال كنيد ، زيرا به آن نياز نخواهيد داشت:
⦁ $ sudo a2dissite 000-default.conf

در آخر ، سرويس Apache را مجدداً اجرا كنيد تا تغييرات خود را به اجرا درآوريد:
⦁ $ sudo systemctl restart apache2

اكنون كه Apache را براي سرويس دهي به هر سايت پيكربندي كرده ايد ، آنها را آزمايش مي كنيد تا مطمئن شويد كه نسخه هاي مناسب PHP در حال اجرا هستند.
مرحله 4 – آزمايش هر دو وب سايت
در اين مرحله ، شما براي اجراي دو نسخه مختلف از PHP ، دو وب سايت پيكربندي كرده ايد. حالا نتايج را آزمايش كنيد.
مرورگر وب خود را باز كنيد و از هر دو سايت http: //site1.your_domain و http: //site2.your_domain بازديد كنيد. دو صفحه را مشاهده خواهيد كرد كه به شكل زير است:

عناوين را يادداشت كنيد. صفحه اول نشان مي دهد كه site1.your_domain نسخه 7.0 PHP را مستقر كرده است. دومي نشان مي دهد كه site2.your_domain نسخه 7.2 PHP را مستقر كرده است.
اكنون كه سايت هاي خود را آزمايش كرده ايد ، فايل هاي info.php را حذف كنيد. از آنجا كه حاوي اطلاعات حساس در مورد سرور مجازي شما هستند و براي كاربران غيرمجاز قابل دسترس ميباشند ، يك تهديد امنيتي به حساب خواهند آمد. براي حذف هر دو فايل ، دستورات زير را اجرا كنيد:
⦁ $ sudo rm -rf /var/www/site1.your_domain/info.php

⦁ $ sudo rm -rf /var/www/site2.your_domain/info.php

اكنون يك سرور مجازي Debian 10 منزوي داريد كه داراي دو وب سايت با دو نسخه مختلف PHP است. با اين حال PHP-FPM به اين يك برنامه محدود نمي شود.
نتيجه
اكنون ميزبان هاي مجازي و PHP-FPM را براي ارائه خدمات به چندين وب سايت و نسخه هاي مختلف PHP در يك سرور مجازي واحد تركيب كرده ايد. تنها محدوديت عملي روي تعداد سايت هاي PHP و نسخه هاي PHP كه سرويس Apache شما قادر به كنترل آن است قدرت پردازش نمونه شماست.
از اينجا ممكن است به بررسي ويژگيهاي پيشرفته تر PHP-FPM بپردازيد ، مانند فرآيند spawning تطبيقي آن يا اينكه چگونه مي تواند sdtout و stderr را وارد كند. از طرف ديگر ، اكنون مي توانيد وب سايت هاي خود را ايمن كنيد. براي انجام اين كار ، مي توانيد آموزش ما در مورد چگونگي تأمين امنيت سايتهاي خود با مجوزهاي رايگان TLS / SSL را از Let’s Encrypt دنبال كنيد.