اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

نحوه اجرا کردن چندین Web Site با استفاده از ورژن های متفاوت PHP در Nginx

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    نحوه اجرا کردن چندین Web Site با استفاده از ورژن های متفاوت PHP در Nginx

    گاهی اوقات برنامه نویسان PHP میخواهند که website ها یا application های متفاوتی را با استفاده از ورژن های متفاوت PHP روی یک وب سرور راه اندازی و اجرا کنند. به عنوان ادمین یک سیستم، شما نیاز به ایجاد محیطی دارید که بتوانید در آن چندین وب سایت را با استفاده از ورژن های متفاوت PHP روی تنها یک وب سرور (به طور مثال Nginx) اجرا کنید.


    در این پست ما به شما نحوه نصب چندین ورژن از PHP و تنظیمات وب سرور Nginx به منظور کارکردن با این ورژن ها از طریق server block ها (منظور virtualhost ها در انجین ایکس) را روی توزیع های CentOS/RHEL 7 با استفاده از LEMP Stack توضیح خواهیم داد.

    Nginx از PHP-FPM (مخفف FastCGI Process Manager) استفاده میکند که جایگزینی برای PHP FastCGI است که شامل یکسری ابزارهای اضافه و مفید برای وب سایت های با load بالا میباشد.


    محیط آزمایشی ما
    • یک سرور CentOS 7 یا RedHat 7 با نصب Minimal
    • وب سرور Nginx
    • PHP 7.1 (که به عنوان ورژن پیش فرض مورد استفاده قرار میگیرد) و ورژن 5.6
    • سرور دیتابیس MariaDB
    • Ip آدرس سرور : 172.16.16.226
    • وب سایت ها : example1.com و example2.com


    مرحله 1 : نصب و فعال کردن ریپازیتوری های EPEL و REMI

    1 - ابتدا کار را با نصب و فعال سازی ریپازیتوری EPEL و Remi شروع میکنیم که آخرین ورژن های PHP روی توزیع های CentOS و RedHat را ارائه میدهند.
    کد PHP:
    # 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 

    2 - سپس پکیج yum-utils را نصب میکنیم که کاربردهای yum را افزایش میدهد و همچنین دستور yum-config-manager را نیز نصب میکند که برای فعال و غیرفعال کردن ریپازیتوری های yum روی سیستم مورد استفاده قرار میگیرد.
    کد PHP:
    # yum install yum-utils 

    نکته : روی RHEL 7 شما میتوانید به اختیار ریپازیتوری خاصی را برای یکسری Dependency ها با استفاده از دستور زیر فعال کنید.
    کد PHP:
    # subscription-manager repos --enable=rhel-7-server-optional-rpms 


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

    3 - برای نصب آخرین ورژن Nginx شما نیاز دارید که ریپازیتوری رسمی nginx را اضافه کنید، فایلی به نام /etc/yum.repos.d/nginx.repo ایجاد کنید.
    کد PHP:
    # vi /etc/yum.repos.d/nginx.repo 
    بنا به توزیع لینوکسی که دارید، خطوط زیر به فایل nginx.repo اضافه کنید.
    کد PHP:
    --------------- On CentOS 7 ---------------
    [
    nginx]
    name=nginx repo
    baseurl
    =http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled
    =1
    --------------- On RHEL 7 ---------------
    [
    nginx]
    name=nginx repo
    baseurl
    =http://nginx.org/packages/rhel/7.x/$basearch/
    gpgcheck=0
    enabled
    =

    4 - زمانیکه ریپازیتوری nginx را اضافه کردید، میتوانید با استفاده از دستور yum همانند زیر nginx را نصب کنید.
    کد PHP:
    # yum install nginx 


    مرحله 3 - نصب سرور دیتابیس MariaDB


    5 - برای نصب آخرین ورژن MariaDB ما نیاز داریم ریپازیتوری رسمی mariadb را اضافه کنیم،‌ برای این منظور فایل /etc/yum.repos.d/mariadb.repo را ایجاد میکنیم.
    کد PHP:
    # vi /etc/yum.repos.d/mariadb.repo 
    خط های زیر را با توجه به توزیع لینوکسی تان به فایل اضافه کنید.
    کد PHP:
    --------------- On CentOS 7 ---------------
    [
    mariadb]
    name MariaDB
    baseurl 
    http://yum.mariadb.org/10.2/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    --------------- On RHEL 7 ---------------
    [
    mariadb]
    name MariaDB
    baseurl 
    http://yum.mariadb.org/10.2/rhel7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=

    همچنین توصیه میشود مطالعه کنید :

    آموزش دستورات پایه MySQL


    6 - بعد از اینکه ریپازیتوری mariadb اضافه شد، میتوانید mariadb را با استفاده از ابزار yum همانند زیر نصب کنید.
    کد PHP:
    # yum install MariaDB-client MariaDB-server 

    7 - سپس با استفاده از اسکریپت زیر امنیت دیتابیس تان را برقرار کنید. پسورد root را تنظیم کنید و به سوالات بعدی (برای غیرفعال کردن دسترسی به یوزر root از راه دور، بستن دسترسی کاربران ناشناس و همچنین حذف دیتابیس test که به صورت پیش فرض میتواند به تمام کاربران دسترسی بدهد، حتی کاربران ناشناس) با استفاده از "y" و فشاردادن کلید "Enter" پاسخ دهید.
    کد PHP:
    # mysql_secure_installation 
    نکته : در صورتی که هنگام اجرای دستور mysql_secure_installation با خطای زیر (Can't connect to local MySQL server) مواجه شدید، مربوط به فعال بودن SELINUX میباشد، که با غیرفعال کردن SELINUX مشکل برطرف خواهد شد.
    کد PHP:
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 
    در لینک زیر به طول مفصل در مورد خطای بالا و نحوه غیرفعال کردن SELINUX توضیح داده شده است.

    برطرف کردن خطای Can't connect to local MySQL server through socket هنگام نصب و راه اندازی MySQL



    همچنین توصیه میشود : 12 راهکار برای Secure کردن دیتابیس MySQL/MariaDB در Linux (به زودی)




    مرحله 4 : نصب چندین ورژن از PHP

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


    نصب PHP ورژن 7.1

    کد PHP:
    # 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

    کد PHP:
    # 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 

    9 - پس از نصب PHP، شما میتوانید از دستور زیر برای چک کردن ورژن PHP پیش فرض در سرورتان استفاده کنید.
    کد PHP:
    # php -v 
    check php version





    مرحله 5 : تنظیمات PHP-FPM و PHP56-PHP-FPM

    10 - جالبترین قسمت آموزش اینجا میباشد، که به شما نحوه اجرا کردن ورژن های مختلف PHP در سرورتان را شرح میدهد. در اینجا، شما میخواهید ورژن های مختلف از php-fpm که Nginx با آن کار میکند را تنظیم کنید. شما باید user/group مربوط به پروسس های FastCGI و Port هایی که آنها listen میکنند را تعریف کنید.

    اینها دو مورد از فایل های پیکربندی میباشد که شما قصد دارید آنها را ویرایش کنید.
    • php-fpm (به صورت پیش فرض 7.1) مسیر : /etc/php-fpm.d/www.conf
    • php56-php-fpm مسیر : /opt/remi/php56/root/etc/php-fpm.d/www.conf

    فایل های بالا را با استفاده از ادیتور متن دلخواه تان باز کنید و user/group مربوط به Proccess های FastCGI را به nginx تغییر دهید.
    کد PHP:
    # vi /etc/php-fpm.d/www.conf   [PHP 7.1]
    # vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 
    مقدار پیش فرض apache میباشد، آنها را همانند زیر به nginx تغییر دهید.
    کد PHP:
    user nginx
    group 
    nginx 

    11 - سپس پارامترهای listen را پیدا کنید و address:port روی درخواست های FastCGI هایی که دریافت خواهند شد تعریف کنید.
    کد PHP:
    listen 127.0.0.1:9000    [php-fpm]
    listen 127.0.0.1:9001    [php56-php-fpm

    12 - به محض اینکه تمام تنظیمات بالا را انجام دادید شما باید سرویس های Nginx, MariaDB و PHP-FPM را start و enable کنید تا به هنگام Boot سیستم به صورت اتوماتیک اجرا شوند.
    کد PHP:
    # 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-php-fpm
    # systemctl start php56-php-fpm 

    توجه : هنگام start کردن دستور دوم از پی اچ پی php56-php-fpm، در صورت بروز هرگونه خطا، میتواند از سمت پالیسی ها SELINUX باشد که دستور فوق را block میکند. اگر SELINUX در حالت enforcing mode باشد آنرا به permissive mode تغییر دهید، سپس سرویس را مجددا start کنید.
    کد PHP:
    # getenforce
    # setenforce 0 


    مرحله 6 : تنظیمات سطح دسترسی ها برای Website ها



    13 - در اینجا شما میتوانید دایرکتوری های مورد نیاز برای وب سایت تان را تحت /var/www/html ایجاد کنید. شما همچنین نیاز به ایجاد دایرکتوری برای ذخیره کردن log ها همانند زیر خواهید داشت.
    کد PHP:
    ---------------- Website 1 ----------------
    # mkdir -p /var/www/html/example1.com/
    # mkdir -p /var/www/html/example2.com/
    ---------------- Website 2 ----------------
    # mkdir -p /var/log/nginx/example1.com/
    # mkdir -p /var/log/nginx/example2.com/ 

    14 - سطوح دسترسی ownership مناسب را روی همه دایرکتوری ها تعریف کنید.
    کد PHP:
    ---------------- 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/ 


    مرحله 7 : تعریف Block های سرور Nginx برای Website ها

    15 - اکنون تنظیم کنید که چگونه Nginx درخواست های به سمت وب سایت شما را با استفاده از فایل های کانفیگ server block (که باید در مسیر /etc/nginx/conf.d موجود باشد) Process خواهد کرد.

    فایل های کانفیگ وب سایت تان را که با پسوند .conf تمام میشوند را ایجاد کنید.
    کد PHP:
    # vi /etc/nginx/conf.d/example1.com.conf
    # vi /etc/nginx/conf.d/example2.com.conf 
    سپس تنظیمات server block زیر را در فایل های مربوطه past کنید.


    وب سایت 1 :

    کد PHP:
    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;
    }


    وب سایت 2 :

    کد PHP:
    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;
    }


    16 - مطمئن شوید که خط زیر را در بخش پایانی بلاک HTTP در فایل /etc/nginx/nginx.conf داشته باشید. این خط به شما کمک میکند که همه فایل های کانفیگی که در دایرکتوری /etc/nginx/conf.d وجود دارد را به هنگام راه اندازی Nginx شامل شود.
    کد PHP:
    include /etc/nginx/conf.d/*.conf; 


    مرحله 8 : تست ورژن های متفاوت PHP

    17 - در نهایت شما نیاز به این دارید که تست کنید آیا سرور شما از دو ورژن PHP استفاده میکند یا خیر، شما میتوانید یک اسکریپت بسیار پایه به Info.php را در دایرکتوری root وب سایت خودتان همانند زیر پیدا کنید.
    کد PHP:
    # echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
    # echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

    18 - برای اعمال همه تغییراتی که در بالا اعمال کردید شما نیاز دارید که سرور Nginx, php-fpm و php56-php-fpm را restart کنید. اما شما قبل از هر کاری میتوانید فایل های کانفیگ Nginx را برای هر گونه خطای syntax ی چک کنید.
    کد PHP:
    # nginx -t
    # systemctl restart nginx php-fpm php56-php-fpm 
    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	check-nginx-syntaxt.png
نمایش ها:	452
اندازه:	12.4 KB
شناسه:	23950




    19 - آخرین موردی که باید انجام دهید خصوصا اگر در حال راه اندازی سرورتان به صورت Local هستید، شما نیاز دارید که local DNS را با استفاده از فایل /etc/hosts در سیستم کلاینت، همانند آنچه که در تصویر زیر نمایش داده شده است تعریف کنید.
    کد PHP:
    172.16.16.226   example1.com   example1
    172.16.16.226   example2
    .com   example2 
    set client host




    نکته : در CentOS 7.0 از Firewalld، استفاده میشود بنابراین آن را طوری تنظیم کنید که به پورت 80 (HTTP) و 443 (https) اجازه دسترسی خارجی را بدهد.

    کد PHP:
    # firewall-cmd --permanent --zone=public --add-service=http
    # firewall-cmd --permanent --zone=public --add-service=https
    # firewall-cmd --reload 

    20 - در نهایت یک مرورگر وب باز کنید و آدرس زیر را برای بررسی کردن ورژن PHP نصب شده روی سیستم تان را وارد کنید.
    کد PHP:
    http://example1.com/info.php
    http://example2.com/info.php 
    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	example1-info.php.png
نمایش ها:	460
اندازه:	120.8 KB
شناسه:	23952



    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	example2-info.php.png
نمایش ها:	461
اندازه:	134.9 KB
شناسه:	23953




    اکنون شما میتوانید فایل های متفاوت را استفاده و وب سایت تان را با ورژن های متفاوت PHP تست کنید. اگر هر گونه سوال یا ابهامی داشتید در اینجا مطرح کنید.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X