Bagaimana cara mengkonfigurasi Apache untuk menjalankan PHP sebagai FastCGI di Ubuntu 12.04 melalui terminal?

35

Saya relatif baru ke dunia unix command line manajemen / administrasi server web.

Banyak host dengan opsi administrasi panel kontrol memungkinkan Anda mengubah cara PHP dijalankan dengan opsi sederhana.

Opsi yang paling umum adalah:

  • modul apache
  • Aplikasi CGI
  • Aplikasi FastCGI

Pertanyaan saya sederhana, bagaimana Anda mengubahnya melalui baris perintah? Saya tahu ada banyak file konfigurasi untuk apache.

Hal terdekat yang saya temukan adalah pertanyaan ini , tetapi struktur direktori sepertinya tidak cocok untuk OS saya (Ubuntu 12.04).

Saya cukup bingung bagaimana tampaknya tidak ada panduan yang jelas bahwa saya dapat menemukan rincian proses ini untuk sesuatu yang tampaknya sangat umum. Maafkan saya jika ini ada ... jika demikian, tolong tunjukkan saya ke arah yang benar.

Evan Mattson
sumber
Hal terdekat yang saya temukan adalah pertanyaan ini pada SO. Situs web itu bukan Stack Overflow.
ta.speot.is
1
Ini pada fastcgi menjelaskannya dengan cukup baik.
1
@ ta.speot.is kelupaan, mohon . . Terima kasih Matt, tentu saja saya melihat fastcgi.com, tetapi saya menemukan petunjuk itu agak sulit untuk diikuti.
Evan Mattson
@ ta.speot.is, salah ketik sederhana. Maksudnya "SE" bukan "SO".
Pacerier

Jawaban:

49

Terima kasih atas jawaban sebelumnya, mereka mendapatkan saya sebagian besar jalan, tetapi untuk mendapatkan hal-hal yang berfungsi saya harus menggabungkan instruksi dari beberapa tempat, jadi saya pikir saya akan menulis satu set lengkap perintah.

FYI Saya menjalankan Ubuntu 14.04, Apache 2.4, dan juga memiliki modphp berjalan secara default, instruksi sebelumnya juga mengabaikan kebutuhan untuk menonaktifkan modphp.

Saya juga menemukan http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ sangat informatif dan mudah.

Cukup jalankan perintah berikut di terminal satu demi satu.

Pertama instal paket yang diperlukan (saya tinggalkan php5 karena ini menganggap itu sudah diinstal, tambahkan kembali untuk instalasi pertama kali). Perhatikan juga dari Apache 2.4 hingga Anda dapat menggunakan event-mpm alih-alih pekerja lihat http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Contoh saya menunjukkan pekerja, tetapi hanya mengganti kata pekerja dengan acara jika Anda lebih suka menggunakannya.

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

Sekarang aktifkan mod yang Anda butuhkan, dan nonaktifkan yang tidak.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Buat file php5.fcgi dan berikan izin server web untuk menggunakannya.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Buat konfigurasi global untuk php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf

rekatkan yang berikut ini (kami akan menggunakan soket alih-alih alamat IP)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Aktifkan conf php5-fpm

sudo a2enconf php5-fpm

Mulai ulang apache dan fpm

sudo service apache2 restart && sudo service php5-fpm restart

Sesuai instruksi lainnya, tempel berikut ini ke file php baru yang dapat ditelusuri di server web Anda.

<?php phpinfo();

Buka file yang baru saja Anda edit di browser web, Jika Anda melihat "FPM / FastCGI" di sebelah Server API, Anda sekarang melayani PHP dengan FastCGI!

JDawgg
sumber
4
Ini adalah penyelamat. Petunjuk untuk apache yang lebih lama tidak berfungsi di Ubuntu 14.04, dan apache 2.4; tapi yang ini bekerja seperti pesona. +100 !!
Bhavin Doshi
Saya mengikuti ini persis, namun saya mendapatkan kesalahan 'Anda tidak memiliki izin untuk mengakses /php5.fcgi/index' ... Dan di log kesalahan, 'klien ditolak oleh konfigurasi server: / usr / lib / cgi-bin /php5.fcgi '... Ada ide?
Just Lucky Really
Mencari tahu ... Saya menggunakan konfigurasi 'order deny, allow' untuk root untuk beberapa alasan ... Semua sudah diperbaiki sekarang: D
Just Lucky Really
Saya mendapatkan kesalahan berikut setelah menginstal paket dan konfigurasi "apache2: kesalahan sintaks pada baris 216 dari /etc/apache2/apache2.conf: Kesalahan sintaks pada baris 9 dari /etc/apache2/conf-enabled/php5-fpm.conf: Diharapkan </Directory> tetapi melihat </IfModule> "
Farooq
Membuat GitHub Gist untuk gist.github.com/efarem/4a8fc03dc69d81998f6e518620f63421
Frank Martin
20

Saya akhirnya menemukan tutorial yang bagus untuk melakukan hal ini. Saya akan menguraikan langkah-langkah yang saya ambil karena saya sudah memasang LAMP stack saya tetapi tutorial lengkapnya dapat ditemukan di sini .

Catatan untuk yang baru:

Dalam tutorial, ini dimulai dengan beralih ke pengguna root dengan:

sudo su

Dalam kasus saya, saya hanya awalan perintah itu sudoalih-alih beralih pengguna, jadi saya akan mendokumentasikan langkah saya seperti itu.

Mulai

Langkah satu: Instal Apache Worker MPM (Modul Multi-Procesing)

sudo apt-get install apache2-mpm-worker

Ini menggantikan prefork yang telah saya instal yang merupakan default ketika menginstal Apache.

Langkah 2: Instal PHP5 dan modul yang diperlukan

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

Pada titik ini Anda mungkin mendapatkan kesalahan saat menginstal 'libapache2-mod-fastcgi':

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Bagian ini tidak ada dalam tutorial di atas

Untuk merekonsiliasi ini, multiverserepositori harus ditambahkan ke sumber apt.

Untuk melakukan ini:

sudo nano /etc/apt/sources.list

Yang saya tambahkan baris berikut:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precisedalam hal ini merujuk pada versi Ubuntu saya " Pangolin Tepat ".

Jadi sekarang, simpan perubahan itu dan kembali ke terminal:

sudo apt-get update

dan lagi:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

yang akan (seharusnya) sekarang berfungsi.

Sekarang aktifkan modul Apache ini:

sudo a2enmod actions fastcgi alias

restart apache

sudo service apache2 restart

Langkah 3: Konfigurasi Apache

Untuk membuat Apache berfungsi dengan PHP-FPM, kita memerlukan konfigurasi berikut:

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

catatan:

Jika Anda menggunakan versi Apache yang lebih lama (2.3.x atau lebih tua), tinggalkan saja

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

Anda dapat memeriksa versi yang diinstal dengan perintah

apache2 -version

Anda dapat meletakkannya di konfigurasi global Apache (jadi itu diaktifkan untuk semua vhosts), misalnya di /etc/apache2/conf.d/php5-fpm.conf(file ini tidak ada, jadi Anda harus membuatnya), atau Anda dapat menempatkannya di setiap vhost yang harus menggunakan PHP-FPM.

Saya memilih untuk pergi ke rute global, jadi:

sudo nano /etc/apache2/conf.d/php5-fpm.conf

rekatkan di blok kode di atas, dan simpan, keluar. File baru ini akan secara otomatis dimuat oleh konfigurasi default Apache yang memuat semua file dalam /etc/apache2/conf.d/direktori.

restart Apache:

sudo service apache2 restart

Sekarang buat file PHP berikut di root dokumen /var/www:

sudo nano /var/www/info.php

Menambahkan:

<?php phpinfo();

simpan & keluar.

Sekarang kita memanggil file itu di browser (mis. http://your-server-ip/info.php)

Di bawah Server API di bagian atas Anda akan melihat FPM/FastCGI.

Keberhasilan!

Untuk informasi lebih lanjut seperti cara mengubah PHP-FPM untuk menggunakan soket unix alih-alih port TCP default atau cara mengkonfigurasi ini untuk masing-masing host virtual alih-alih semuanya, lihat tutorial sumber yang ditautkan di atas.

Evan Mattson
sumber
Saya harus menambahkan ini sebelumnya </IfModule>: <Directory / usr / lib / cgi-bin> Wajib semua diberikan </Directory>
Rimu Atkinson
@RimuAtkinson benar, secara default semua direktori akan dilarang dalam versi yang lebih baru, jadi Anda harus secara khusus memberikan akses ke direktori cgi-bin. Ini harus ditambahkan ke jawaban, karena tanpa itu Anda akan mendapatkan 403.
johnrom
Terima kasih untuk ini howto! Perhatikan bahwa Require all grantedhal tersebut hanya diperlukan sejak Apache 2.4. Jika saya meletakkannya di file konfigurasi dengan Apache 2.2, gagal.
Tema
Saya telah menambahkan catatan. (Jangan ragu untuk mengeditnya; ini adalah pos Anda.;)) Untuk detailnya, lihat stackoverflow.com/a/22040167/592323
leemes
1
Jawaban ini tidak berfungsi di ubuntu 14.04. Rujuk jawaban oleh JDawgg untuk melakukannya dalam 14,04.
Bhavin Doshi
1

Di Ubuntu 14.04 setelah melakukan langkah-langkah dari jawaban yang diterima, edit /etc/apache2/conf-available/php5-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

Kemudian jalankan

#sudo a2enconf php5-fpm
#sudo apache2 restart
marcanuy
sumber
0

Jika seseorang melakukan ini di Ubuntu 16.04 dan telah diturunkan dari php 7 ke php 5.6 (Ondrej), Anda harus mengganti beberapa baris (berdasarkan jawaban JDawgg):

sudo apt-get install libapache2-mod-fastcgi php5-fpm ke:

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork ke:

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-available/php5-fpm.conf ke:

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

Proses instalasi php5.6-fpm sudah membuat file, jadi tidak perlu membuatnya. Namun, saya menghapus semua teks yang ada pada file itu karena dimaksudkan untuk mod_php5.

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Saya mengubah jalur dari /var/run/php5-fpm.sock ke /var/run/php/php5.6-fpm.sock karena file tersebut berada di sana.

sudo a2enconf php5-fpm ke:

sudo a2enconf php5.6-fpm

sudo service apache2 restart && sudo service php5-fpm restart ke:

sudo service apache2 restart && sudo service php5.6-fpm restart

Saya harap ini membantu pemula lain seperti saya :)

Nazq
sumber