خانه / سیستم عامل لینوکس / سنت او اس / چگونه سایت هایی متعددی را با نسخه های مختلف PHP در Nginx اجرا کنیم؟
چگونه  سایت هایی متعددی را با نسخه های مختلف PHP در Nginx اجرا کنیم؟

چگونه سایت هایی متعددی را با نسخه های مختلف PHP در Nginx اجرا کنیم؟

برخی از اوقات ممکن است توسعه دهنده های PHP بخواهند  سایت ها یا اپلیکیشن های مختلفی را به کمک نسخه های متفاوت PHP بر روی همان وب سرور بسازند و اجرا کنند. به عنوان ادمین سیستم های لینوکسی باید محیطی را نصب و راه اندازی کنید که در آن قادر باشید سایت های مختلفی را به کمک نسخه های متفاوت PHP بر روی وب سرور واحدی همچون Nginx  اجرا کنید. در این مقاله قصد داریم نحوه نصب نسخه های مختلف PHP و پیکربندی وب سرور را  در توزیع های CentOS/RHEL 7  بیان کنیم. پس همراه وب ایده باشید.

همانطور که می دانید وب سرور Nginx از PHP-FPM  استفاده می کند.

محیط نصب ازمایشی:

  • سروری با سیستم عامل CentOS 7 یا RHEL 7 با کمترین موارد نصب دشه
  • Nginx HTTP Server
  • PHP 7.1 و ۵٫۶
  • سرور پایگاه داده MariaDB
  • ای پی آدرس سرور: ۱۶۸٫۵۶٫۱۰
  • سایت: com و example2.com

 

مرحله اول: نصب و فعالسازی مخزن EPEL و Remi

 

خوب اولین کاری که باید انجام دهید نصب و فعالسازی مخزن EPEL و Remi است که می تواند آخرین نسخه از پشته PHP  را بر روی CentOS/RHEL 7 فراهم آورد:

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

در مرحله بعدی  پکیج yum-utils  را باید نصب کنید که قابلیت های بومی Yum را توسعه می دهد و دستور yum-config-manager  را برایتان فراهم می سازد که برای فعالسازی یا غیر فعال کردن مخزن Yum بر روی سیستم استفاده می شود.

# yum install yum-utils

نکته: بر روی RHEL 7 شما می توانید  کانال اختیاری را برای برخی از dependencies فعال کنید. برای اینکار از دستور زیر استفاده نمایید:

# subscription-manager repos –enable=rhel-7-server-optional-rpms

مرحله دوم: نصب وب سرور Nginx

برای نصب آخرین نسخه از Nginx، باید  مخزن رسمی این وب سرور را اضافه کنیم و فایلی به نام /etc/yum.repos.d/nginx.repo ایجاد نماییم:

# vi /etc/yum.repos.d/nginx.repo

 حالا خطوط زیر را بر اساس توزیعی که استفاده می کنید به فایل خود اضافه نمایید:

————— بر روی سنت او اس ۷ —————

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

————— RHEL7 —————

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/rhel/7.x/$basearch/

gpgcheck=0

enabled=1

بعد از اینکه مخزن وب سرور اضافه شد می توانید Nginx را به کمک ابزار yum package manager به شیوه زیر نصب کنید:

# yum install nginx

مرحله سوم: نصب سرور پایگاه داده MariaDB

برای نصب آخرین نسخه از MariaDB باید مخزن رسمی آن را اضافه کنیم و فایلی به نام /etc/yum.repos.d/mariadb.repo ایجاد نماییم.

# vi /etc/yum.repos.d/mariadb.repo

بسته به توزیعی که استفاده می کنید خطوط زیر را به فایل خود اضافه کنید:

————— سنت او اس۷ —————

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.2/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

————— RHEL 7 —————

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.2/rhel7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

بعد از اینکه مخزن MariaDB اضافه شد، می توانید این سرور پایگاه داده را به کمک ابزار yum package manager نصب کنید:

# yum install MariaDB-client MariaDB-server

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

# mysql_secure_installation

مرحله چهارم: نصب نسخه های متعدد PHP

برای نصب  نسخه های متعدد PHP برای پروژه های خود می توانید از دستور yum-config-manager  استفاده کنید.

نصب PHP7.1:

 

# yum-config-manager –enable remi-php71  [Default]

# yum install php php-common php-fpm

# yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

 

نصب PHP 5.6:

# yum install php56 php56-php-common php56-php-fpm

# yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

بعد از  اینکه PHP را نصب کردید، می توانید از دستور زیر استفاده کنید و ببینید نسخه PHP پیش فرضی که بر روی سرور شما مورد استفاده قرار گرفته چه چیزی است:

# php -v

مرحله پنجم: پیکربندی PHP-FPM و PHP56-PHP-FPM

این قسمت یکی از جذاب ترین بخش های آموزش ماست. در ادامه به شما توضیح می دهیم که چگونه می توانید واقعا نسخه های مختلف PHP را بر روی سرور خود اجرا نمایید.  در ادامه نسخه های مختلف php-fpm  که وب سرور Nginx با آن کار خواهد کرد را پیکربندی می کنیم. شما باید کاربر/ گروهی از فرآیندهای FastCGI و نیز پورت های مدنظر را تعریف کنید.

این ها دو فایل پیکربندی هستند که باید ویرایش کنیم:

 

  • php-fpm – /etc/php-fpm.d/www.conf
  • php56-php-fpm-/opt/remi/php56/root/etc/php-fpm.d/www.conf

فایل های بالا را باز کنید و کاربر/ گروه فرایندهای FastCGI را تنظیم نمایید:

# vi /etc/php-fpm.d/www.conf   [PHP 7.1]

# vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6]

مقدار پیش فرض باید آپاچی باشد، شما این مقدار را به Nginx تغییر دهید:

user = nginx

group = nginx

 

سپس پارامتر listen را پیدا کنید و address:port  را تعریف نمایید:

listen = 127.0.0.1:9000 [php-fpm]

listen = 127.0.0.1:9001 [php56-php-fpm]

بعد از اینکه تمامی پیکربندهای مدنظر اعمال شد، باید Nginx, MariaDB  و PHP-FPM  را استارت کنید و آن ها را به گونه ای تنظیم نمایید که بتوانند در بوت سیستم به صورت خودکار اجرا شوند:

# systemctl enable nginx

# systemctl start nginx

# systemctl enable mariadb

# systemctl start mariadb

—————- PHP 7.1 —————-

# systemctl enable php-fpm

# systemctl start php-fpm

—————- PHP 5.6 —————-

# systemctl enable php56-fpm

# systemctl start php56-php-fpm

 

توجه:  در مواردی که به هنگام آغاز instance دوم PHP،  خطاهای زیادی دریافت  می کنید، ممکن است SELinux policy مانع از آغاز شدن آن شده باشد. اگر  چنین بود، SELinux را بر روی permissive mode قرار دهید و سپس سرویس را دوباره آغاز نمایید

# getenforce

# setenforce 0

 

مرحله ششم: راه اندازی سایت با Permissionها

در این مرحله شما می توانید دایرکتوری های مورد نیاز برای سایت را در /var/www/html/ ایجاد کنید. همچنین باید دایرکتوری ها را برای ذخیره سازی فایل لاگ ایجاد نمایید:

—————- سایت اول —————-

# mkdir -p /var/www/html/example1.com/

# mkdir -p /var/www/html/example2.com/

—————- سایت دوم —————-

# mkdir -p /var/log/nginx/example1.com/

# mkdir -p /var/log/nginx/example2.com/

 

 

بر روی تمامی دایرکتوری های permission های مناسب قرار دهید:

—————- Website 1 —————-

# chown -R root:nginx /var/www/html/example1.com/

# chmod -R 755 /var/www/html/example1.com/

# chown -R root:nginx /var/log/nginx/example1.com/

# chmod -R 660 /var/log/nginx/example1.com/

—————- Website 2 —————-

# chown -R root:nginx /var/www/html/example2.com/

# chmod -R 755 /var/www/html/example2.com/

# chown -R root:nginx /var/log/nginx/example2.com/

# chmod -R 660 /var/log/nginx/example2.com/

 

 

مرحله هفتم: نصب بلوک های سرور Nginx برای سایت

حالا باید نحوه پردازش درخواست های سایت توسط وب سرور  را به کمک فایل پیکربندی بلوک سرور که  در /etc/nginx/conf.d/ قرار دارد تعیین کنیم. فایل پیکربندی را برای سایت خود ایجاد کنید و اکستنشن .conf به آن بدهید.

# vi /etc/nginx/conf.d/example1.com.conf

# vi /etc/nginx/conf.d/example2.com.conf

سپس پیکربندی زیر را در فایل های مربوطه پیست نمایید:

وب سایت اول:

پیکربندی برای example1.com

server {

listen 80;

server_name example1.com www.example1.com;

root   /var/www/html/example1.com/;

index index.php index.html index.htm;

#charset koi8-r;

access_log /var/log/nginx/example1.com/example1_access_log;

error_log   /var/log/nginx/example1.com/example1_error_log   error;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {

root    /var/www/html/example1.com/;

fastcgi_pass   ۱۲۷٫۰٫۰٫۱:۹۰۰۰;   #set port for php-fpm to listen on

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include         fastcgi_params;

include /etc/nginx/fastcgi_params;

}

}

وب سایت دوم:

پیکربندی برای example2.com

server {

listen 80;

server_name example2.com www.example2.com;

root    /var/www/html/example2.com/;

index index.php index.html index.htm;

#charset koi8-r;

access_log /var/log/nginx/example2.com/example2_access_log;

error_log  /var/log/nginx/example2.com/example2_error_log   error;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {

root    /var/www/html/example2.com/;

fastcgi_pass   ۱۲۷٫۰٫۰٫۱:۹۰۰۱;   #set port for php56-php-fpm to listen on

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include         fastcgi_params;

include /etc/nginx/fastcgi_params;

}

}

حالا اطمینان حاصل کنید که خطوط زیر را در بخش انتهایی بلوک Http در /etc/nginx/nginx.conf دارید.

include /etc/nginx/conf.d/*.conf;

 

مرحله هشتم: تست نسخه های مختلف PHP

در نهایت باید ببینید سرور شما می تواند از دو نسخه مختلف PHP استفاده کند یا خیر. می توانید اسکریپت info.php را در دایرکتوری روت سایت خود به شیوه زیر ایجاد کنید:

# echo “<?php phpinfo(); ?>” > /var/www/html/example1.com/info.php

# echo “<?php phpinfo(); ?>” > /var/www/html/example2.com/info.php

 

برای اعمال تمامی تغییراتی که در بالا ایجاد کردید، باید Nginx, php-fpm  و php56-php-fpm را ریستارت کنید. اما می توانید قبل از اینکار  فایل پیکربندی Nginx را برای خطاهای سینتکس بررسی نمایید:

# nginx -t

# systemctl restart nginx php-fpm php56-php-fpm

یک کار دیگر هم هست که باید انجام دهید به خصوص اگر سرور را به صورت محلی اجرا می کنید. به کمک فایل /etc/hosts   می توانید local DNS را راه اندازی کنید:

۱۹۲٫۱۶۸٫۵۶٫۱۰   example1.com   example1

۱۹۲٫۱۶۸٫۵۶٫۱۰   example2.com   example2

 

در نهایت مرورگر خود را باز کنید و آدرس زیر را تایپ نمایید تا بتوانید نسخه نصب شده PHP بر روی سیستم را تایید کنید:

http://example1.com/index.php

http://example2.com/index.php

خوب کار شما تمام شده است. حالا می توانید فایل هایتان را توسعه دهید و سایت ها را با نسخه های PHP مختلف تست نمایید.

جوابی بنویسید

ایمیل شما نشر نخواهد شدخانه های ضروری نشانه گذاری شده است. *

*