Cara Jalankan Banyak Versi PHP (5.6, 7.x) dengan Nginx di Ubuntu 18.04 LTS
Artikel sebelumnya telah dibahas tentang cara jalankan banyak versi PHP dengan Apache di Ubuntu 18.04 LTS, kali ini masih kasus yang sama tetapi menggunakan Nginx web server.
1. Install Nginx
Install Nginx dan cek status service-nya apakah berjalan atau tidak.
1 2 | apt install nginx -y systemctl status nginx |
2. Install PHP Banyak Versi
Install PHP multi versi menggunakan repository dari PPA (Personal Package Archives), karena versi PHP yang tersedia di repository default Ubuntu 18.04 LTS yaitu PHP v7.2.
1 2 3 4 5 6 7 | add-apt-repository ppa:ondrej/php apt update apt install php5.6 php5.6-fpm -y apt install php7.0 php7.0-fpm -y apt install php7.1 php7.1-fpm -y apt install php7.2 php7.2-fpm -y apt install php7.3 php7.3-fpm -y |
Mencari nama paket modul atau extension PHP gunakan perintah apt search atau apt-cache search.
Misalnya mencari modul untuk php7.2.
1 2 | apt search php7.2 | more apt-cache search php7.2 | more |
Menguji hasil install PHP dengan menampilkan versi PHP.
1 2 3 4 5 | php5.6 -v php7.0 -v php7.1 -v php7.2 -v php7.3 -v |
Setting versi default PHP untuk php-cli, misalnya ingin memakai versi PHP 7.2 sebagai versi default.
1 2 | update-alternatives --set php /usr/bin/php7.2 php -v |
3. Setting Server Block
Selanjutnya membuat server block (di Apache disebut sebagai virtualhost) untuk masing-masing versi PHP.
- PHP v5.6 = php56.aplikasi.oke
- PHP v7.0 = php70.aplikasi.oke
- PHP v7.1 = php71.aplikasi.oke
- PHP v7.2 = php72.aplikasi.oke
- PHP v7.3 = php73.aplikasi.oke
Membuat direktori root dan file index.php untuk masing-masing virtualhost versi PHP.
1 2 3 4 5 6 7 | cd /var/www mkdir php56 php70 php71 php72 php73 echo '<?php phpinfo(); ?>' | sudo tee --append php56/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php70/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php71/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php72/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php73/index.php |
Membuat file server block php56.aplikasi.oke.conf untuk PHP v5.6.
1 2 | cd /etc/nginx/sites-available nano php56.aplikasi.oke.conf |
Isi dari file server block php56.aplikasi.oke.conf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | server { listen 80; server_name php56.aplikasi.oke; root /var/www/php56; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } access_log /var/log/nginx/php56.aplikasi.oke.access.log; error_log /var/log/nginx/php56.aplikasi.oke.error.log warn; } |
Pada file server block di atas, opsi fastcgi_pass yang menentukan file .php dieksekusi dengan PHP versi berapa.
Lanjutkan dengan membuat file server block untuk versi PHP yang lain, sesuaikan opsi server_name, root, fastcgi_pass, dan file access_log serta error_log.
Terakhir aktifkan setting server block dan restart nginx.
1 2 3 4 5 6 7 | ln -s /etc/nginx/sites-available/php56.aplikasi.oke.conf /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/php70.aplikasi.oke.conf /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/php71.aplikasi.oke.conf /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/php72.aplikasi.oke.conf /etc/nginx/sites-enabled ln -s /etc/nginx/sites-available/php73.aplikasi.oke.conf /etc/nginx/sites-enabled systemctl restart nginx systemctl status nginx |
4. Pengujian
Browsing masing-masing subdomain, tiap subdomain harus menampilkan versi PHP yang berbeda.
5. Beda Versi PHP di Direktori Tertentu
Server block di atas berlaku untuk subdomain, sehingga file yang berada dalam direktori dan sub-direktori subdomain tersebut menjalankan versi PHP yang sama. Muncul pertanyaan bagaimana caranya jika masih dalam satu domain atau subdomain ingin menjalankan PHP dengan versi berbeda di direktori tertentu? Jawabannya dengan cara menambah opsi location /sub-direktori di setting server block.
Misalnya root /var/www/aplikasi.oke dengan url akses http://aplikasi.oke dan sub-direktori lain menjalankan PHP v5.6, sementara khusus untuk sub-direktori /var/www/aplikasi.oke/v2 dengan url akses https://aplikasi.oke/v2 menjalankan PHP v7.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | server { listen 80; server_name aplikasi.oke; root /var/www/aplikasi.oke; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location /v2 { try_files $uri $uri/ /index.php?$query_string; location ~ \.php$ { try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } } location ~ \.php$ { try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_pass unix:/var/run/php/php5.6-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } access_log /var/log/nginx/aplikasi.oke.access.log; error_log /var/log/nginx/aplikasi.oke.error.log warn; } |
Selamat mencoba 🙂