وب 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 را مستقر مي كند.
پيش نيازها
• يك سرور CentOS 7 با حداقل 1 گيگابايت رم كه طبق راهنماي راه اندازي سرور اوليه با تنظيم شده باشد ، شامل كاربر sudo غير ريشه و فايروال.
•وب سرور Apache كه با دنبال كردن آموزش نحوه نصب وب سرور Apache در CentOS 7 راه اندازي شود.
• نام دامنه پيكربندي شده براي اشاره به سرور CentOS 7 شما. براي اهداف اين آموزش ، از دو زير دامنه استفاده خواهيم كرد كه هر يك با يك ركورد A در تنظيمات DNS ما مشخص شده اند: site1.your_domain و site2.your_domain.
مرحله 1 – نصب PHP ورژن هاي 7.0 و 7.2 با PHP-FPM
با تكميل پيش نيازها، اكنون نسخه هاي PHP 7.0 و 7.2 را نصب خواهيد كرد. مخزن SCL )مجموعه نرم افزار) نسخه هاي بيشماري از پشته PHP را براي سيستم CentOS 7 نگه مي دارد. اگر به جديدترين نسخه PHP نياز داريد و در SCL موجود نيست ، به جاي آن ، Remi PPA (بايگاني بسته شخصي) را بررسي كنيد.
با نصب مخزن SCL در سيستم خود شروع كنيد:
⦁ $ sudo yum install centos-release-scl -y

ابتدا بيابيم جستجو كنيم كه نسخه هاي PHP 7 در SCL در دسترس هستند:
⦁ $ sudo yum list rh-php7[0-9].x86_64

خروجي مانند اين را خواهيد ديد:
Output
Available Packages
rh-php70.x86_64 2.3-1.el7 centos-sclo-rh
rh-php71.x86_64 1-1.el7 centos-sclo-rh
rh-php72.x86_64 1-2.el7 centos-sclo-rh
rh-php73.x86_64 1-1.el7

توجه داشته باشيد كه جديدترين نسخه ، PHP 7.3 نيز موجود است. براي مثال ما نسخه هاي 7.0 و 7.2 را نصب خواهيم كرد.
بياييد با نسخه قديمي تر شروع كنيم. rh-php70 و rh-php70-php-fpm را نصب كنيد:
⦁ $ sudo yum install rh-php70 rh-php70-php-fpm -y

⦁ rh-php70 متابسته اي است كه برنامه هاي PHP را اجرا مي كند.
⦁ rh-php70-php-fpm مترجم Fast Manager Manager را فراهم مي كند كه به عنوان يك Daemon اجرا مي شود و درخواست هاي Fast / CGI را دريافت مي كند.
حالا فرايند را براي نسخه PHP 7.2 تكرار كنيد. rh-php72 و rh-php72-php-fpm را نصب كنيد.
⦁ $ sudo yum install rh-php72 rh-php72-php-fpm -y

در مرحله بعدي ، دستورات زير را براي شروع استفاده از هر دو مجموعه نرم افزار اجرا كنيد:
⦁ $ sudo scl enable rh-php70 bash

⦁ $ sudo scl enable rh-php72 bash

به طور پيش فرض ، هر دو نسخه PHP پورت 9000 را گوش مي دهند. اما در اين آموزش مي خواهيم دو نسخه را همزمان اجرا كنيم. بنابراين ، بياييد دو پورت جديد را تعيين كنيم:
براي تحقق اين امر مي توانيد /etc/opt/rh/rh-php70/php-fpm.d/www.conf را در ويرايشگر متن مورد علاقه خود باز كرده و هر عدد 9000 را به 9002 تغيير دهيد. سپس فايل را ذخيره كرده و ببنديد و فرآيند را براي /etc/opt/rh/rh-php72/php-fpm.d/www.conf تكرار كنيد ، اكنون 9000 را با 9003 جايگزين كنيد. در غير اين صورت ، مي توانيد از اين دو دستور sed براي انجام جايگزيني استفاده كنيد:
⦁ $ sudo sed -i ‘s/:9000/:9002/’ /etc/opt/rh/rh-php70/php-fpm.d/www.conf

⦁ $ sudo sed -i ‘s/:9000/:9003/’ /etc/opt/rh/rh-php72/php-fpm.d/www.conf

اكنون براي هر يك از خدمات PHP خود پورت اختصاصي تعيين كرده ايد. با اين حال ، قبل از اين كه اين تغييرات كار كنند ، بايد پورت ها را به پيكربندي SELinux اضافه كنيد.
SELinux مخفف Security Enhanced Linux است و به طور پيش فرض در CentOS 7 فعال مي شود. شما بايد پورت هاي جديد 9002 و 9003 خود را به پايگاه داده SELinux اضافه كنيد و آنها را به خدمات httpd خود اختصاص دهيد ، در غير اين صورت برنامه هاي شما اجرا نمي شوند. براي انجام اين كار از دستور semanage استفاده كنيد:
⦁ $ sudo semanage port -a -t http_port_t -p tcp 9002

⦁ $ sudo semanage port -a -t http_port_t -p tcp 9003

پرچم -a مشخص مي كند كه شما يك آبجكت را به بانك اطلاعاتي اضافه مي كنيد. پرچم -t نوع آبجكت را مشخص مي كند ، كه در اين حالت http_port_t است. و پرچم -p پروتكل tcp را تعيين مي كند. مي توانيد در اين آموزش و يا با مراجعه به مطالب رسمي SELinux درباره SELinux و فرمان semanage اطلاعات بيشتري كسب كنيد.
اكنون آماده شروع و فعال كردن خدمات PHP خود هستيد. با سرويس rh-php70-php-fpm خود شروع كنيد و آن را فعال كنيد تا در بوت شروع شود:
⦁ $ sudo systemctl start rh-php70-php-fpm

⦁ $ sudo systemctl enable rh-php70-php-fpm

در مرحله بعدي ، وضعيت سرويس rh-php70-php-fpm خود را تأييد كنيد:
⦁ $ sudo systemctl status rh-php70-php-fpm

خروجي مانند اين را خواهيد ديد:
Output
● rh-php70-php-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago
Main PID: 1852 (php-fpm)
Status: “Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec”
CGroup: /system.slice/rh-php70-php-fpm.service
├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf)
├─1853 php-fpm: pool www
├─1854 php-fpm: pool www
├─1855 php-fpm: pool www
├─1856 php-fpm: pool www
└─1857 php-fpm: pool www

Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager…
Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

با تكرار اين فرايند ، سرويس rh-php72-php-fpm را راه اندازي كنيد و آن را فعال كنيد تا از بوت شروع شود:
⦁ $ sudo systemctl start rh-php72-php-fpm

⦁ $ sudo systemctl enable rh-php72-php-fpm

در مرحله بعد ، وضعيت سرويس rh-php72-php-fpm خود را تأييد كنيد:
⦁ $ sudo systemctl status rh-php72-php-fpm

خروجي ديگري مانند اين را مشاهده خواهيد كرد:
Output
● rh-php72-php-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago
Main PID: 1876 (php-fpm)
Status: “Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec”
CGroup: /system.slice/rh-php72-php-fpm.service
├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)
├─1877 php-fpm: pool www
├─1878 php-fpm: pool www
├─1879 php-fpm: pool www
├─1880 php-fpm: pool www
└─1881 php-fpm: pool www

Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager…
Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.

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

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

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

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

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

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

دستور chown مالكيت دو دايركتوري وب سايت شما را به كاربر apache و گروه apache تغيير مي دهد. دستور chmod مجوزهاي مرتبط با آن كاربر و گروه و ساير افراد را تغيير مي دهد.
در مرحله بعد يك فايل info.php را در هر فهرست ريشه وب سايت ايجاد خواهيد كرد. با اين كار اطلاعات نسخه PHP هر وب سايت نمايش داده مي شود. با site1 شروع كنيد:
⦁ $ sudo vi /var/www/site1.your_domain/info.php

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

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

سرور وب شما اكنون داراي ديركتوري هاي ريشه مستند است كه هر سايت براي ارائه داده ها به بازديد كنندگان به آن نياز دارد. در مرحله بعدي ، وب سرور Apache خود را پيكربندي خواهيد كرد تا با دو نسخه مختلف PHP كار كند.
مرحله 3 – پيكربندي Apache براي هر دو وب سايت
در اين بخش دو فايل پيكربندي هاست مجازي ايجاد خواهيد كرد. با اين كار دو وب سايت شما قادر خواهند بود همزمان با دو نسخه مختلف PHP كار كنند.
براي اينكه Apache بتواند اين محتوا را ارائه دهد ، بايد يك فايل هاست مجازي با دستورالعمل هاي صحيح ايجاد كنيد. شما دو فايل پيكربندي هاست مجازي جديد را درون ديركتوري (/etc/httpd/conf.d/) ايجاد خواهيد كرد.
ابتدا يك فايل پيكربندي هاست مجازي جديد براي وب سايت site1.your_domain ايجاد كنيد. در اينجا Apache را براي ارائه محتوا با استفاده از PHP 7.0 هدايت مي كنيد:
⦁ $ sudo vi /etc/httpd/conf.d/site1.your_domain.conf

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


ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
SetHandler “غير مجاز مي باشد:fcgi://127.0.0.1:9002
ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
AddHandler php70-fcgi .php
Action php70-fcgi /cgi-bin/php70.fcgi
ErrorLog /var/log/httpd/site1.your_domain_error.log
CustomLog /var/log/httpd/site1.your_domain_access.log combined

براي DocumentRoot مسير دايركتوري ريشه وب سايت خود را مشخص مي كنيد. براي ServerAdmin ايميلي را اضافه مي كنيد كه مدير سايت your_domain بتواند به آن دسترسي پيدا كند. براي ServerName آدرس url زير دامنه خود را اضافه مي كنيد. براي SetHandler پورت9002 را مشخص مي كنيد. دستورالعمل هاي باقيمانده نيز خدمات شما را براي پياده سازي PHP 7.0 پيكربندي مي كنند.
فايل را ذخيره كنيد و ببنديد.
در مرحله بعدي ، يك فايل پيكربندي هاست مجازي جديد براي وب سايت site2.your_domain ايجاد كنيد. شما براي استقرار PHP 7.2 اين زير دامنه را مشخص مي كنيد:
⦁ $ sudo vi /etc/httpd/conf.d/site2.your_domain.conf

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

ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
SetHandler “غير مجاز مي باشد:fcgi://127.0.0.1:9003
ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”
AddHandler php72-fcgi .php
Action php72-fcgi /cgi-bin/php72.fcgi
ErrorLog /var/log/httpd/site2.your_domain_error.log
CustomLog /var/log/httpd/site2.your_domain_access.log combined

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

خروجي زير را مشاهده خواهيد كرد :
Output
⦁ Syntax OK

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

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

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

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

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