Nginx'te Farklı PHP Sürümlerine Sahip Birden Çok Web Sitesi Nasıl Çalıştırılır


Bazen PHP geliştiricileri aynı web sunucusu üzerinde PHP'nin farklı sürümlerini kullanarak farklı web siteleri/uygulamalar oluşturmak ve çalıştırmak isterler. Bir Linux sistem yöneticisi olarak, tek bir web sunucusunda (ör. Nginx) farklı PHP sürümünü kullanarak birden fazla web sitesini çalıştırabileceğiniz bir ortam kurmanız gerekmektedir.

Bu eğitimde, PHP'nin birden çok sürümünü nasıl yükleyeceğinizi ve Nginx web sunucusunu, sunucu blokları (Apache'deki sanal ana bilgisayarlar) aracılığıyla bunlarla çalışacak şekilde nasıl yapılandıracağınızı açıklayacağız. LEMP yığınını kullanan CentOS/RHEL 7 dağıtımları.

Ayrıca Okuyun: Pyenv – Belirli Projeler için Birden Çok Python Sürümü Kurun

Nginx, bazı uygulamalarda alternatif bir PHP FastCGI uygulaması olan PHP-FPM'yi (FastCGI Süreç Yöneticisi anlamına gelir) kullanır. Ağır yüklü web siteleri için ekstra, kullanışlı özellikler.

Test Ortamı Kurulumu

  1. Minimum kurulumla CentOS 7 veya RHEL 7 sunucusu.
  2. Nginx HTTP Sunucusu.
  3. PHP 7.1 (varsayılan sürüm olarak kullanılacak) ve 5.6.
  4. MariaDB Veritabanı Sunucusu.
  5. Sunucu IP adresi: 192.168.56.10.
  6. Web siteleri: example1.com ve example2.com.

Adım 1: EPEL ve Remi Deposunu Kurma ve Etkinleştirme

1. Öncelikle PHP'nin en son sürümlerini sunan EPEL ve Remi deposunu kurup etkinleştirerek başlayın. CentOS/RHEL 7 dağıtımlarında yığınlanır.

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. Daha sonra, yum'un yerel işlevlerini genişleten ve etkinleştirmek için kullanılan yum-config-manager komutunu sağlayan yum-utils paketini yükleyin. veya sistemdeki Yum depolarını devre dışı bırakın.

yum install yum-utils

Not: RHEL 7'de aşağıdaki komutu kullanarak bazı bağımlılıklar için isteğe bağlı kanalı etkinleştirebilirsiniz.

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

Adım 2: Nginx Web Sunucusunu Yükleme

3. Nginx'in en son sürümünü yüklemek için resmi Nginx deposunu eklememiz, /etc/yum.repos.d/nginx.repo adında bir dosya oluşturmamız gerekiyor.

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

Dağıtımınıza göre dosyaya aşağıdaki satırları ekleyin.

--------------- 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=1 

4. Nginx deposu eklendikten sonra, gösterildiği gibi yum paket yöneticisi aracını kullanarak Nginx'i yükleyebilirsiniz.

yum install nginx

Adım 3: MariaDB Veritabanı Sunucusunun Kurulumu

5. MariaDB'nin en son sürümünü yüklemek için resmi MariaDB deposunu eklememiz, /etc/yum.repos.d/mariadb.repo adında bir dosya oluşturmamız gerekiyor.

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

Dağıtımınıza göre dosyaya aşağıdaki satırları ekleyin.

--------------- 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=1 

6. MariaDB deposu eklendikten sonra, gösterildiği gibi yum paket yöneticisi aracını kullanarak MariaDB'yi yükleyebilirsiniz.

yum install MariaDB-client MariaDB-server

7. Daha sonra aşağıdaki betiği kullanarak veritabanı sunucusu kurulumunu güvenli hale getirin. Bir root şifresi belirleyin ve uzaktan root kullanıcı girişini devre dışı bırakmak, anonim kullanıcı hesaplarını kaldırmak ve veritabanını test etmek için sonraki soruların geri kalanı için y yanıtını verin ve [Enter] tuşuna basın. varsayılana tüm kullanıcılar, hatta anonim kullanıcılar bile erişebilir.

mysql_secure_installation

Ayrıca Okuyun: Linux için 12 MySQL/MariaDB Güvenliği En İyi Uygulaması

Adım 4: PHP'nin Birden Çok Sürümünü Yükleme

8. Projelerinize farklı PHP sürümleri yüklemek için, yum-config-manager komutunu kullanarak gösterildiği gibi PHP'nin birden çok sürümünü ve gerekli modüllerin çoğunu yükleyin.

PHP 7.1 Sürümünü Yükleyin

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 Sürümünü Yükleyin

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'yi yükledikten sonra, sunucunuzda kullanılan PHP'nin varsayılan sürümünü kontrol etmek için aşağıdaki komutu kullanabilirsiniz.

php -v

Adım 5: PHP-FPM ve PHP56-PHP-FPM'yi Yapılandırma

10. Bu, bu eğitimin en ilginç kısmıdır; sunucunuzda birden fazla PHP sürümünü nasıl çalıştırabileceğinizi açıklar. Burada, Nginx'in birlikte çalışacağı farklı php-fpm sürümlerini yapılandıracaksınız. FastCGI işlemlerinin kullanıcısını/grubunu ve dinleyecekleri portları tanımlamalısınız.

Bunlar, düzenleyeceğiniz aşağıdaki iki yapılandırma dosyasıdır.

  • php-fpm (varsayılan 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

Yukarıdaki dosyaları açın, FastCGI işlemlerinin kullanıcı/grubunu ayarlayın.

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

Varsayılan değerler Apache olmalıdır, gösterildiği gibi bunları nginx olarak değiştirin.

user = nginx
group = nginx

11. Ardından, dinleme parametrelerini bulun ve FastCGI isteklerinin alınacağı adres:port'u tanımlayın.

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

12. Yukarıdaki tüm yapılandırmalar tamamlandıktan sonra Nginx, MariaDB ve PHP-FPM'yi başlatıp etkinleştirmeniz gerekir. sistem önyüklemesinde otomatik olarak başlatmak için.

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 

Dikkat: PHP'nin ikinci örneğini php56-php-fpm başlatırken herhangi bir hatayla karşılaşırsanız, bir SELinux politikası engelliyor olabilir başladığı andan itibaren. SELinux zorlama modunda ise, onu izin veren moda ayarlayın ve ardından hizmeti bir kez daha başlatmayı deneyin.

getenforce
setenforce 0 

Adım 6: Web Sitelerini İzinlerle Kurun

13. Bu noktada artık /var/www/html/ altında web siteleriniz için gerekli dizinleri oluşturabilirsiniz. Ayrıca günlükleri depolamak için aşağıdaki gibi dizinler oluşturmanız gerekir:

---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/ 
mkdir -p /var/log/nginx/example1.com/ 
 

---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/ 

14. Tüm dizinlerde uygun sahiplik izinlerini ayarlayın.

---------------- 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/

Adım 7: Web Siteleri için Nginx Sunucu Bloklarını Ayarlayın

15. Şimdi /etc/nginx/conf.d/ konumunda bulunması gereken sunucu bloğu yapılandırma dosyalarını kullanarak Nginx'in web sitelerinize gelen istekleri nasıl işleyeceğini yapılandırın.

Web sitelerinizin .conf uzantısıyla biten yapılandırma dosyalarını oluşturun.

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

Daha sonra aşağıdaki sunucu bloğu yapılandırmalarını ilgili dosyalara yapıştırın.

Web sitesi 1

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;

        }
}

Web sitesi 2

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. /etc/nginx/nginx.conf dosyasındaki http bloğunun kapanış kısmında aşağıdaki satırın bulunduğundan emin olun. Nginx çalışırken tüm yapılandırma dosyalarının /etc/nginx/conf.d/ dizinine dahil edilmesine yardımcı olur.

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

Adım 8: Farklı PHP Sürümlerini Test Etme

17. Son olarak, sunucunuzun PHP'nin iki sürümünü kullanıp kullanmadığını test etmeniz gerekir. Gösterildiği gibi web sitelerinizin belge kök dizinlerinde çok basit bir info.php komut dosyası oluşturabilirsiniz.

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. Yukarıda yaptığınız tüm değişiklikleri uygulamak için Nginx, php-fpm ve php56-php-'yi yeniden başlatmanız gerekir. fpm. Ancak bunu yapmadan önce öncelikle Nginx yapılandırma dosyalarında herhangi bir sözdizimi hatası olup olmadığını kontrol edebilirsiniz.

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. Yapılacak son bir şey daha var, özellikle sunucunuzu yerel olarak çalıştırıyorsanız, aşağıdaki şekilde gösterildiği gibi /etc/hosts dosyasını kullanarak yerel DNS ayarlamanız gerekir. aşağıdaki ekran görüntüsü.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Son olarak, bir web tarayıcısı açın ve sistemde yüklü olan PHP sürümlerini doğrulamak için aşağıdaki adresleri yazın.

http://example1.com/index.php
http://example2.com/index.php

Bu kadar! Artık dosyaları dağıtabilir ve web sitelerini farklı PHP sürümleriyle test edebilirsiniz. Eklemek istediğiniz veya iletmek istediğiniz sorularınız varsa aşağıdaki yorum formunu kullanın.