Saya telah berhasil membuat FastCGI bekerja dengan Apache 2.4 di Ubuntu 16.04 dengan mengadaptasi instruksi dari utas askubuntu ini, dokumen HowtoForge ini, dan tutorial Digital Ocean ini.
Semua sumber tersebut mengatakan untuk membuat /etc/apache2/conf-available/php7.0-fpm.conf
dan memberitahu Anda apa yang harus dimasukkan ke dalamnya. Tapi setelah menginstal php-fpm
, saya sudah memiliki file tersebut, dengan isi sebagai berikut:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
Jadi saya malah membuat conf saya sendiri dan memasukkan kode dari instruksi di dalamnya dan mengaktifkannya.
Apa yang ada php7.0-fpm.conf
untuk? Jika saya mengaktifkannya selain conf saya, situs web saya berhenti berfungsi. Saya khawatir saya tidak melakukan ini seperti yang seharusnya dilakukan dan dapat menimbulkan masalah di masa depan. Sangat sulit untuk menemukan dokumentasi terkini yang bagus tentang ini.
Untuk referensi, inilah seluruh prosedur saya:
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
Isi /etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Perintah dilanjutkan:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Terima kasih sebelumnya atas bantuan Anda.
Jawaban yang Diterima:
Saya memukul kebingungan yang sama, saya merasakan sakit Anda. Setelah banyak membaca, menjadi jelas bagi saya bahwa sebagian besar artikel sudah ketinggalan zaman dan mengacu pada metode sebelumnya (atau terkadang kombinasi).
Menggunakan PHP-FPM dengan konfigurasi bawaan Ubuntu 16.04, Anda hanya perlu melakukan ini:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Saya melakukan sebagian besar dari apa yang Anda lakukan, lalu menghapus semuanya, ketika konfigurasi khusus itu tidak masuk akal.
Untuk apa php7.0-fpm.conf yang ada?
Konfigurasi yang Anda temukan diinstal oleh paket adalah untuk menggunakan mod_proxy_fcgi. Ini mengikat file .php melalui mod_proxy_fcgi ke PHP FPM, menggunakan mod_proxy, melalui Unix Domain Socket. Sejauh yang saya tahu ini adalah "resep" paling mutakhir (dari enam yang sekarang tersedia!)
Anda tidak perlu menginstal libapache2-mod-fastcgi
itu metode yang berbeda dan lebih tua. Anda tidak perlu menulis konfigurasi itu – itu untuk menggunakan mod_fastcgi secara langsung. Anda tidak perlu menginstal actions fastcgi alias
sebagaimana mereka mengkonfigurasi mod_fastcgi.
Saya merasa aneh bahwa tidak ada artikel – bahkan untuk Ubuntu 16 – yang menyebutkan resep baru sudah siap untuk Anda!
Komentar ini menjelaskan sejarah bagi saya:
Metode yang disukai sekarang adalah fastcgi, menggunakan salah satu resep tersebut:
(mod_fastcgi, httpd 2.2) http://wiki.Apache.org/httpd/php-fastcgi
(mod_fcgid, httpd 2.2) http://wiki.Apache.org/httpd/php-fcgid
(mod_proxy_fcgi, httpd 2.4) http://wiki.Apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544 (2013)
Selanjutnya artikel dari Apache ini, merinci tiga sub-opsi untuk mengonfigurasi mod_proxy_fcgi agar terhubung ke FPM, menggunakan ProxyPassMatch atau SetHandler + UDS. Perhatikan bahwa UDS adalah sejak Apache 2.4.10 per https://httpd.Apache.org/docs/2.4/mod/mod_proxy_fcgi.html sehingga seseorang memerlukan trusty-backports atau yang lebih baru.
https://wiki.Apache.org/httpd/PHP-FPM
Jadi saya datang untuk memvisualisasikan sekarang ada enam cara untuk mengonfigurasinya:
Kira-kira dalam urutan sejarah:
-
Modul Apache PHP:mod_php (cara lama)
-
Melalui FastCGI – menggunakan konfigurasi Handler/Action/Alias/FastCgiExternalServer
sebuah. mod_fastcgi
b. mod_fcgid
-
Menggunakan PHP-FPM melalui mod_proxy_fcgi, dikonfigurasi melalui:
sebuah. Soket TCP (IP dan port) ProxyPassMatch … fcgi://127.0.0.1:9000/path/
b. Unix domain socket (UDS) ProxyPassMatch … unix:/path/to/socket
c. (UDS) melalui SetHandler “proxy:unix:ATAU SetHandler”proxy:fcgi:
Penafian:ini semua baru bagi saya, jadi saya mungkin masih memiliki lima hal yang salah dan sepuluh hal untuk dipelajari.