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

برخی از اوقات ممکن است توسعه دهنده های PHP بخواهند سایت ها یا اپلیکیشن های مختلفی را به کمک نسخه های متفاوت PHP بر روی همان وب سرور بسازند و اجرا کنند. به عنوان ادمین سیستم های لینوکسی باید محیطی را نصب و راه اندازی کنید که در آن قادر باشید سایت های مختلفی را به کمک نسخه های متفاوت PHP بر روی وب سرور واحدی همچون Nginx اجرا کنید. در این مقاله قصد داریم نحوه نصب نسخه های مختلف PHP و پیکربندی وب سرور را در توزیع های CentOS/RHEL 7 بیان کنیم. پس همراه وب ایده باشید.
همانطور که می دانید وب سرور Nginx از PHP-FPM استفاده می کند.
محیط نصب ازمایشی:
- سروری با سیستم عامل CentOS 7 یا RHEL 7 با کمترین موارد نصب دشه
- Nginx HTTP Server
- PHP 7.1 و 5.6
- سرور پایگاه داده MariaDB
- ای پی آدرس سرور: 168.56.10
- سایت: 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
حالا خطوط زیر را بر اساس توزیعی که استفاده می کنید به فایل خود اضافه نمایید:
————— بر روی سنت او اس 7 —————
[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
بسته به توزیعی که استفاده می کنید خطوط زیر را به فایل خود اضافه کنید:
————— سنت او اس7 —————
[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 127.0.0.1:9000; #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 127.0.0.1:9001; #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 را راه اندازی کنید:
192.168.56.10 example1.com example1
192.168.56.10 example2.com example2
در نهایت مرورگر خود را باز کنید و آدرس زیر را تایپ نمایید تا بتوانید نسخه نصب شده PHP بر روی سیستم را تایید کنید:
http://example1.com/index.php
http://example2.com/index.php
خوب کار شما تمام شده است. حالا می توانید فایل هایتان را توسعه دهید و سایت ها را با نسخه های PHP مختلف تست نمایید.