Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara Menghubungkan NGINX ke PHP-FPM Menggunakan UNIX atau TCP / IP Socket

Cara Menghubungkan NGINX ke PHP-FPM Menggunakan UNIX atau TCP / IP Socket




Server web NGINX (sebagai proxy terbalik) melayani aplikasi PHP melalui protokol FastCGI (sebagai server aplikasi backend). NGINX menggunakan PHP-FPM (FastCGI Process Manager), sebuah implementasi PHP FastCGI alternatif yang berjalan di latar belakang sebagai daemon, mendengarkan permintaan CGI. Ia hadir dengan fitur-fitur tambahan yang dirancang untuk memberi daya pada situs web atau aplikasi web yang sarat beban, tetapi dapat digunakan untuk situs dengan ukuran berapa pun.

PHP-FPM tidak hanya mendukung konfigurasi kumpulan sumber daya FastCGI, tetapi juga meningkatkan banyak internal FastCGI dan meningkatkan pelaporan kesalahan, penghentian skrip, dan banyak lagi. Ini fitur daemonisasi PHP, manajemen proses, jumlah proses dinamis dari mana permintaan dapat berasal, header kesalahan, dukungan upload dipercepat, dan banyak lagi.

Untuk menerima permintaan FastCGI dari NGINX, PHP-FPM dapat mendengarkan pada soket TCP / IP atau soket domain UNIX. Alamat mana pun yang Anda pilih untuk digunakan adalah yang digunakan NGINX untuk menghubungkan (permintaan proxy) ke PHP-FPM, menggunakan arahan fastcgi_pass.

Panduan ini menjelaskan cara mengkonfigurasi NGINX ke aplikasi PHP server menggunakan PHP-FPM. Ini menjelaskan kapan harus menggunakan soket TCP / IP atau soket domain UNIX untuk menghubungkan NGINX ke PHP-FPM dan mengapa.

Panduan ini mengasumsikan bahwa Anda telah menginstal NGINX dan PHP-FPM di sistem Linux Anda, jika tidak, lihat:

Apa yang Harus Saya Gunakan: UNIX Domain Socket atau TCP / IP Socket?

Soket domain UNIX (atau IPC) adalah sarana komunikasi antar proses (IPC) yang memungkinkan pertukaran data yang efisien antara proses yang berjalan pada sistem operasi yang sama sementara soket TCP / IP (atau Domain Internet) memungkinkan proses untuk berkomunikasi melalui jaringan.

Tidak seperti soket TCP / IP yang mengidentifikasi server dengan alamat dan port IP (mis. 127.0.0.1:9000), Anda dapat mengikat server ke soket domain UNIX menggunakan pathname file (mis. / Run / php-fpm / www. sock), yang terlihat di sistem file.

Socket domain UNIX adalah jenis khusus file - file dan izin direktori berlaku untuk itu (seperti halnya dengan jenis lain file UNIX) dan dapat digunakan untuk membatasi proses pada host yang dapat membaca dan menulis ke file, (dan karenanya berkomunikasi dengan server backend).

Dengan cara ini, soket domain UNIX aman karena hanya proses pada host lokal yang dapat menggunakannya. Soket TCP / IP dapat terpapar ke internet yang menimbulkan risiko keamanan kecuali jika langkah-langkah keamanan tambahan seperti firewall diterapkan.

Yang penting, menggunakan soket domain UNIX tidak sama dengan menggunakan soket TCP / IP mengenai kinerja, beberapa tes dan tolok ukur telah membuktikan soket domain UNIX menjadi lebih cepat. Kelemahan utama dari soket domain UNIX adalah bahwa mereka kurang skalabel, mereka hanya mendukung komunikasi antar-proses dalam sistem operasi yang sama (OS).

Di mana saya dapat mengkonfigurasi alamat mendengarkan PHP-FPM?
Anda dapat mengkonfigurasi alamat yang didengarkan oleh PHP-FPM dalam file konfigurasi kumpulan sumber daya. Perhatikan bahwa dengan PHP-FPM, Anda dapat menjalankan beberapa kumpulan proses dengan pengaturan berbeda. Kumpulan default disebut www.

Lokasi file konfigurasi sumber daya tergantung pada cara PHP dan PHP-FPM diinstal pada sistem Linux (apakah itu versi default / tunggal atau beberapa versi secara bersamaan).

Sebagai contoh, pada CentOS 8, dengan versi tunggal, semua file konfigurasi PHP berada di direktori / etc dan file konfigurasi PHP-FPM pool (www) default adalah /etc/php-fpm.d/www.conf:

Untuk daftar semua file konfigurasi PHP, gunakan perintah ls berikut.

# ls /etc/php*



Pada Ubuntu 20.04, file konfigurasi PHP terletak di direktori /etc/php/<php-version>/ dan file konfigurasi PHP-FPM pool (www) default adalah /etc/php/<php-version>/fpm/pool.d/www.conf:

$ ls /etc/php/7.4/




Mengkonfigurasi PHP-FPM untuk Mendengarkan pada UNIX Domain Socket


Untuk mengkonfigurasi PHP-FPM untuk mendengarkan pada soket domain UNIX, buka file konfigurasi default PHP-FPM Anda, menggunakan editor teks favorit Anda.


Kemudian cari arahan dengarkan dan setel ke pathname file soket domain UNIX sebagai berikut. Perhatikan bahwa sebagian besar instalasi menggunakan soket domain UNIX secara default.


Jika Anda menggunakan soket domain UNIX, Anda juga perlu mengatur izin baca / tulis yang sesuai untuk file tersebut, untuk memungkinkan koneksi dari server web NGINX. Secara default, NGINX berjalan sebagai pengguna dan grup nginx di CentOS/RHEL/Fedora dan www-data di Ubuntu dan Debian.

Jadi, cari parameter listen.owner dan listen.group dan atur sesuai. Juga, atur mode ke 0660 menggunakan parameter listen.mode.


Perhatikan bahwa jika izin pada file soket domain UNIX tidak diatur dengan benar, NGINX dapat mengembalikan kesalahan gateway yang buruk.


Mengkonfigurasi PHP-FPM untuk Mendengarkan pada Soket TCP / IP

Meskipun soket domain UNIX lebih cepat dari soket TCP / IP, yang pertama kurang skalabel, karena hanya dapat mendukung komunikasi antar-proses pada OS yang sama. Jika NGINX dan server aplikasi backend (PHP-FPM) berjalan pada sistem yang berbeda, Anda harus mengkonfigurasi PHP-FPM untuk mendengarkan pada soket TCP / IP untuk koneksi.

Di file konfigurasi PHP-FPM pool, atur alamat mendengarkan sebagai berikut. Pastikan bahwa port yang Anda pilih tidak digunakan oleh proses atau layanan lain pada sistem yang sama.

listen = 127.0.0.1:3000

Mengkonfigurasi NGINX agar Bekerja dengan Server Aplikasi PHP-FPM
Setelah Anda mengkonfigurasi alamat yang didengarkan oleh PHP-FPM, Anda perlu mengonfigurasi NGINX ke permintaan proxy melalui alamat itu, menggunakan parameter konfigurasi fastcgi_pass, dalam file konfigurasi blok server virtual.

Misalnya, jika file konfigurasi untuk situs web Anda adalah /etc/nginx/conf.d/example.com.conf, buka untuk mengedit.

# vim /etc/nginx/conf.d/example.com.conf 
Cari blok lokasi untuk memproses file .php dan atur parameter fastcgi_pass sebagai berikut, jika Anda mengonfigurasi PHP-FPM untuk mendengarkan pada soket domain UNIX.

fastcgi_pass unix:/run/php/php7.4-fpm.sock #Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock  #CentOS/RHEL/Fedora

Atau gunakan alamat TCP / IP jika Anda mengkonfigurasi PHP-FPM untuk mendengarkan pada soket TCP / IP. Jika server aplikasi backend (PHP-FPM) berjalan pada server terpisah (ganti 10.42.0.10 dengan alamat IP mesin yang menjalankan server PHP-FPM FastCGI).

fastcgi_pass  10.42.0.10:3000;
Penting: Pada CentOS 8, PHP-FPM didefinisikan sebagai server upstream dalam file /etc/nginx/conf.d/php-fpm.conf, dalam blok upstream, dengan nama php-fpm.

Anda dapat membuat perubahan di sini sesuai tergantung pada alamat PHP-FPM dikonfigurasi untuk mendengarkan, di file konfigurasi pool. Konfigurasi default menunjuk ke soket domain UNIX.

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}


dan dalam file blok server situs Anda, cukup atur parameter fastcgi_pass seperti yang ditunjukkan.

fastcgi_pass php-fpm;

Setelah membuat perubahan pada konfigurasi PHP-FPM dan NGINX, periksa sintaks konfigurasi mereka untuk kebenaran sebagai berikut.

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
# php-fpm -t
# nginx -t
Sementara output perintah hanya memperlihatkan file konfigurasi utama, semua file konfigurasi lainnya disertakan dan diperiksa juga.


Selanjutnya, Anda perlu me-restart dua layanan untuk menerapkan perubahan, menggunakan perintah systemctl.
------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora  -------------
# systemctl restart nginx
# systemctl restart php-fpm
Jika Anda mendapatkan kesalahan, Anda dapat memeriksa file log NGINX dan PHP-FPM menggunakan perintah cat.
------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora  -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php-fpm/www-error.log

Hanya itu yang kami miliki untuk Anda. Bagian komentar di bawah ini dapat digunakan untuk mengajukan pertanyaan.

Berbagi adalah peduli...
JSI-Tech Solution
JSI-Tech Solution Penyedia Jasa Setting alat jaringan di Bandung.

Posting Komentar untuk "Cara Menghubungkan NGINX ke PHP-FPM Menggunakan UNIX atau TCP / IP Socket"