Cara Menjalankan Banyak Website dengan Versi PHP Berbeda di Nginx


Terkadang pengembang PHP ingin membangun dan menjalankan situs web/aplikasi berbeda menggunakan versi PHP berbeda di server web yang sama. Sebagai administrator sistem Linux, Anda diharuskan menyiapkan lingkungan di mana Anda dapat menjalankan beberapa situs web menggunakan versi PHP berbeda pada satu server web, yaitu Nginx.

Dalam tutorial ini, kami akan menjelaskan kepada Anda cara menginstal beberapa versi PHP dan mengonfigurasi server web Nginx agar berfungsi dengannya melalui blok server (host virtual di Apache) di Distribusi CentOS/RHEL 7 menggunakan tumpukan LEMP.

Baca Juga: Pyenv – Instal Beberapa Versi Python untuk Proyek Tertentu

Nginx menggunakan PHP-FPM (singkatan dari FastCGI Process Manager), yang merupakan implementasi PHP FastCGI alternatif dengan beberapa fitur tambahan yang berguna untuk situs web yang sarat muatan.

Pengaturan Lingkungan Pengujian

  1. Server CentOS 7 atau RHEL 7 dengan instalasi minimal.
  2. Server HTTP Nginx.
  3. PHP 7.1 (untuk digunakan sebagai versi default) dan 5.6.
  4. Server Basis Data MariaDB.
  5. Alamat IP server: 192.168.56.10.
  6. Situs web: example1.com dan example2.com.

Langkah 1: Menginstal dan Mengaktifkan Repositori EPEL dan Remi

1. Pertama, mulailah dengan menginstal dan mengaktifkan repositori EPEL dan Remi, yang menawarkan versi PHP terbaru bertumpuk pada distribusi 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

2. Selanjutnya instal paket yum-utils, yang memperluas fungsionalitas asli yum dan menyediakan perintah yum-config-manager, yang digunakan untuk mengaktifkan atau nonaktifkan repositori Yum di sistem.

yum install yum-utils

Catatan: Di RHEL 7 Anda dapat mengaktifkan saluran opsional untuk beberapa dependensi menggunakan perintah berikut.

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

Langkah 2: Menginstal Server Web Nginx

3. Untuk menginstal Nginx versi terbaru, kita perlu menambahkan repositori resmi Nginx, membuat file bernama /etc/yum.repos.d/nginx.repo.

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

Tambahkan baris berikut ke file sesuai distribusi Anda.

--------------- 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. Setelah repo nginx ditambahkan, Anda dapat menginstal Nginx menggunakan alat manajer paket yum seperti yang ditunjukkan.

yum install nginx

Langkah 3: Menginstal Server Basis Data MariaDB

5. Untuk menginstal MariaDB versi terbaru, kita perlu menambahkan repositori resmi MariaDB, membuat file bernama /etc/yum.repos.d/mariadb.repo.

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

Tambahkan baris berikut ke file sesuai distribusi Anda.

--------------- 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. Setelah repo MariaDB ditambahkan, Anda dapat menginstal MariaDB menggunakan alat manajer paket yum seperti yang ditunjukkan.

yum install MariaDB-client MariaDB-server

7. Setelah itu, amankan instalasi server database menggunakan skrip di bawah ini. Tetapkan kata sandi root dan jawab y dan tekan [Enter] untuk sisa pertanyaan berikutnya untuk menonaktifkan login pengguna root jarak jauh, menghapus akun pengguna anonim dan menguji database yang mana defaultnya dapat diakses oleh semua pengguna, bahkan pengguna anonim sekalipun.

mysql_secure_installation

Baca Juga: 12 Praktik Terbaik Keamanan MySQL/MariaDB untuk Linux

Langkah 4: Menginstal Beberapa Versi PHP

8. Untuk menginstal berbagai versi PHP untuk proyek Anda, gunakan perintah yum-config-manager untuk menginstal beberapa versi PHP bersama dengan sebagian besar modul yang diperlukan seperti yang ditunjukkan.

Instal Versi PHP 7.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

Instal Versi 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

9. Setelah menginstal PHP, Anda dapat menggunakan perintah berikut untuk memeriksa versi default PHP yang digunakan di server Anda.

php -v

Langkah 5: Mengonfigurasi PHP-FPM dan PHP56-PHP-FPM

10. Ini adalah bagian paling menarik dari tutorial ini, ini menjelaskan bagaimana Anda sebenarnya dapat menjalankan beberapa versi PHP di server Anda. Di sini, Anda akan mengonfigurasi berbagai versi php-fpm yang akan digunakan Nginx. Anda harus menentukan pengguna/grup proses FastCGI serta port yang akan didengarkan.

Ini adalah dua file konfigurasi berikut yang akan Anda edit.

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

Buka file di atas, atur pengguna/grup proses 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] 

Nilai defaultnya adalah apache, ubah menjadi nginx seperti yang ditunjukkan.

user = nginx
group = nginx

11. Selanjutnya, temukan parameter mendengarkan, dan tentukan alamat:port tempat permintaan FastCGI akan diterima.

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

12. Setelah semua konfigurasi di atas selesai, Anda perlu memulai dan mengaktifkan Nginx, MariaDB dan PHP-FPM untuk memulai secara otomatis saat boot sistem.

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 

Perhatian: Jika Anda mendapatkan kesalahan saat memulai instance kedua PHP, php56-php-fpm, kebijakan SELinux mungkin memblokir itu dari awal. Jika SELinux berada dalam mode penegakan, setel ke mode permisif, lalu coba mulai layanan sekali lagi.

getenforce
setenforce 0 

Langkah 6: Siapkan Situs Web dengan Izin

13. Pada titik ini, Anda sekarang dapat membuat direktori yang diperlukan untuk situs web Anda di bawah /var/www/html/. Anda juga perlu membuat direktori untuk menyimpan log sebagai berikut:

---------------- 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. Tetapkan izin kepemilikan yang sesuai pada semua direktori.

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

Langkah 7: Siapkan Blok Server Nginx untuk Situs Web

15. Sekarang konfigurasikan bagaimana Nginx akan memproses permintaan ke situs web Anda menggunakan file konfigurasi blok server yang seharusnya berlokasi di /etc/nginx/conf.d/.

Buat file konfigurasi untuk situs web Anda yang diakhiri dengan ekstensi .conf.

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

Kemudian tempel konfigurasi blok server berikut di file masing-masing.

Situs web 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;

        }
}

Situs web 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. Pastikan Anda memiliki baris berikut di bagian penutup blok http di /etc/nginx/nginx.conf. Akan membantu jika memasukkan semua file konfigurasi ke dalam direktori /etc/nginx/conf.d/ saat Nginx sedang berjalan.

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

Langkah 8: Menguji Versi PHP yang Berbeda

17. Terakhir, Anda perlu menguji apakah server Anda menggunakan dua versi PHP. Anda dapat membuat skrip info.php yang sangat mendasar di direktori akar dokumen situs web Anda seperti yang ditunjukkan.

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

18. Untuk menerapkan semua perubahan yang Anda buat di atas, Anda perlu memulai ulang Nginx, php-fpm dan php56-php- fpm. Namun pertama-tama Anda dapat memeriksa apakah ada kesalahan sintaksis pada file konfigurasi Nginx sebelum melakukannya.

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

19. Ada satu hal terakhir yang harus dilakukan, terutama jika Anda menjalankan server secara lokal, Anda perlu menyiapkan DNS lokal menggunakan file /etc/hosts seperti yang ditunjukkan pada gambar tangkapan layar di bawah ini.

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. Terakhir, buka browser web dan ketik alamat berikut untuk memverifikasi versi PHP yang diinstal pada sistem.

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

Itu dia! Sekarang Anda dapat menyebarkan file dan menguji situs web dengan versi PHP yang berbeda. Jika Anda memiliki tambahan atau pertanyaan untuk diajukan, gunakan formulir komentar di bawah.