Image

Bilgi Veritabanı → Farklı PHP sürümleriyle iki php-fpm hizmetini aynı domaine farklı dizinlerde yapılandırma

[Virtual sunucular]
Yayın tarihi: 24.11.2022

Bir web sunucusunda, aynı alan adı üzerinde (örneğin nginx kullanılarak) iki farklı PHP sürümü ile çalışan iki uygulama dağıtma görevi oldukça yaygındır. Örneğimizde, bir web sitesi ve bir müşteri etkileşim uygulaması (CRM) oluşturacağız.

Hedef:

  • domain.tld (ana site)
  • domain.tld/nested-app (uygulama)

Güvenlik amacıyla, uygulama dizini, web sitesiyle aynı hiyerarşik seviyede bulunmalıdır. Böylece, birinin hacklenmesi durumunda diğeri etkilenmez. Örneğimiz CentOS 7 üzerinde yapılandırılacaktır.

Dizin yapımız:

  • /var/www/domain.tld/site (web sitesi dizini)
  • /var/www/domain.tld/nested-app (uygulama dizini)

Farklı PHP sürümleri gerektiği için, ikinci bir php-fpm hizmetini kurmamız ve nginx ile entegre etmemiz gerekecek.


1. PHP 8 ve php-fpm hizmetinin kurulumu

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

Remi deposunda PHP 8'i etkinleştirip gerekli paketleri kuruyoruz:

apt install php php-fpm php-mysql php-common php-cli php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

2. PHP 7 ve ikinci php-fpm hizmetinin kurulumu

yum install centos-release-scl
yum install rh-php73 rh-php73-php-fpm
scl enable rh-php73 bash
semanage port -a -t http_port_t -p tcp 9003
systemctl start rh-php73-php-fpm
systemctl enable rh-php73-php-fpm

Bu adımlardan sonra PHP 7 hizmeti otomatik başlatılmaya hazır hale gelecektir.


3. Nginx kurulumu ve yapılandırması

yum install nginx

Aşağıdaki yapılandırma dosyasını oluşturuyoruz:

/etc/nginx/conf.d/domain_tld.conf

Yapılandırma içeriği:

server { 

listen xx.x.xx.x:443 ssl;
listen [ipv6]:443 ssl; 
server_name domain.tld www.domain.tld; 
index index.php index.html;

set $base /var/www/domain.tld;
root $base/site;
ssl_certificate /etc/ssl/domain_tld/cert23.crt;
ssl_certificate_key /etc/ssl/domain_tld/cert23.key;
client_body_timeout 5s;
client_header_timeout 5s;
client_max_body_size 32m;
ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains;";
ssl_stapling on;
ssl_stapling_verify on;

gzip on;
gzip_disable "msie6";

gzip_types text/plain text/css application/json application/x-javascript text/xml 
application/xml application/xml+rss text/javascript application/javascript;

# -- www to no www --

if ($host ~* ^www.domain.tld$) {
 rewrite ^(.*)$ https://domain.tld$1 permanent;
}

# -- www to no www --

location / {
 try_files $uri $uri/ /index.php?$query_string;
}

location ^~ /nested-app {alias $base/nested-app;

    if (!-e $request_filename) {
        rewrite ^ /nested-app/index.php last;
    }

location ~ \.php$ {
        if (!-f $request_filename) {rewrite ^
        /nested-app/index.php last;
        }
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9003;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        }
}
location ~ \.php$ { include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000; 
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}

Port atamaları:

  • domain.tld - port 9000 üzerinden çalışıyor.
  • domain.tld/nested-app - port 9003 üzerinden çalışıyor.

4. php-fpm yapılandırması

PHP hizmet portları şu dosyalarda tanımlanır:

  • Ana PHP için: /etc/php-fpm.d/www.conf
  • İkinci PHP 7 hizmeti için: /etc/opt/rh/rh-php73/php-fpm.d/www.conf

5. Servisleri yeniden başlatma

Yapılandırmayı uygulamak için tüm servisleri yeniden başlatın:

systemctl restart rh-php73-php-fpm
systemctl restart php-fpm
systemctl restart nginx




No Comments Yet