Solusi PHP-FPM sudah tak mencukupi lagi untuk saya. Sering kali saya mendapati sistem-sistem dengan pengunjung banyak tidak bereaksi. Padahal, semua layanan menyala.
Dari kasak-kusuk di Internet yang saya dapati bahwa ternyata PHP-FPM harus sering-sering dijalankan ulang. Bahkan, ada yang memasang CRON untuk menjalankan ulang PHP-FPM setiap 15 menit sekali. Saya pun terenyuh.
Untungnya, ada sebuah solusi, yakni uWSGI. Awalnya, ia hanya untuk menjalankan layanan web berbasis Python. Namun, sekarang ia berkembang untuk menjalankan hampir apa saja. Enaknya dia, setiap proses dijalankan sebagai pengguna biasa (non-root).
Cara Pasang
Cara pasang seperti biasa:
sudo apt-get install nginx uwsgi uwsgi-plugin-php
Seperti biasa.
Konfigurasi
NGINX
Cara konfigurasi sama seperti PHP-FPM, tetapi sedikit berbeda. Berikut sekilas contoh konfigurasi salah satu virtual host (/etc/nginx/sites-available/xxx)
server { ... location / { index index.php; try_files $uri $uri/ /index.php?$args; } ... location ~ .php$ { include uwsgi_params; uwsgi_modifier1 14; uwsgi_pass unix:/tmp/uwsgi_webphp.sock; } }
Perhatikan bahwa tidak ada yang berubah dari baris lain. Hanya blok pengolah PHP yang diubah dari FastCGI untuk PHP-FPM menjadi UWSGI. Aplikasi nginx memiliki antarmuka alami dengan uWSGI.
Seperti biasa, aktifkan virtual host dengan:
sudo ln -s /etc/nginx/sites-{available,enabled}/xxx sudo service nginx restart
Selanjutnya uWSGI.
uWSGI
Pada Debian Jessie, virtual host uWSGI terletak pada /etc/uwsgi/apps-available/xxx.ini
Perhatikan kalau uWSGI mengharapkan ekstensi .ini pada setiap berkas konfigurasi virtual host yang valid.
Mari buat berkas /etc/uwsgi/apps-available/webphp.ini (Iya, saya kurang kreatif, silakan ganti nama berkas dengan apa saja)
[uwsgi] socket=/tmp/uwsgi_webphp.sock pidfile2=/tmp/uwsgi_webphp.pid daemonize=/var/log/uwsgi/webphp.log plugins=php chdir=/var/www cheaper=4 close-on-exec=1 harakiri=360 max-requests=128 processes=8 master=1 uid=www-data gid=www-data chmod=666 log-5xx=1 vacuum=1 post-buffering=8192
Aktifkan konfigurasi ala Debian:
sudo ln -s /etc/uwsgi/apps-{available,enabled}/webphp.ini sudo service uwsgi restart
Selesai.