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


Saya relatif baru di dunia manajemen web / administrasi server baris perintah unix.

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 hanyalah, bagaimana Anda mengubah ini melalui baris perintah? Saya tahu ada banyak file konfigurasi untuk apache.

Hal terdekat yang saya temukan adalah pertanyaan iniNamun struktur direktori tampaknya 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 tunjuk saya ke arah yang benar.


34
2017-11-17 02:33


asal


Hal terdekat yang saya temukan adalah pertanyaan ini pada SO Situs web itu bukan Stack Overflow. - ta.speot.is
Inipada fastcgi menjelaskannya dengan cukup baik.
@ ta.speot.is pemaafan, pleaassuh.. Terima kasih, Matt, tentu saja saya melihat fastcgi.com, tetapi saya merasa instruksi itu agak sulit untuk diikuti. - Evan Mattson
@ ta.speot.is, salah ketik Sederhana. Dia berarti "SE" bukan "SO". - Pacerier


Jawaban:


Terima kasih atas jawaban-jawaban sebelumnya yang paling banyak saya dapatkan, tetapi untuk menyelesaikan pekerjaan 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 menjalankan modphp 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/ menjadi sangat informatif dan lugas.

Cukup jalankan perintah berikut di terminal satu demi satu.

Pertama-tama instal paket-paket yang diperlukan (saya meninggalkan php5 karena ini mengasumsikan itu sudah diinstal, tambahkan kembali untuk instalasi pertama kali). Juga perhatikan dari Apache 2.4 Anda dapat menggunakan event-mpm daripada pekerja lihat http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/. Contoh saya menunjukkan pekerja, tetapi ganti saja 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 Anda miliki.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Buat file php5.fcgi dan berikan izin webserver 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

tempelkan berikut ini (kami akan menggunakan soket bukan 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 konfigurasi php5-fpm

sudo a2enconf php5-fpm

Mulai ulang apache dan fpm

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

Sesuai instruksi lainnya tempelkan hal-hal berikut ke dalam file php baru yang dapat dijelajahi 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!


48
2017-09-22 22:01



Ini adalah penyelamat hidup. Instruksi untuk apache yang lebih tua tidak berfungsi pada Ubuntu 14.04, dan apache 2.4; tapi yang ini bekerja seperti pesona. +100 !! - Bhavin Doshi
@ bkd.online Tidak bisa mengatakannya dengan lebih baik. @ JDawgg Nice one :) - Gadgetroid
Saya mengikuti ini persis, namun saya mendapatkan kesalahan 'Anda tidak memiliki izin untuk mengakses /php5.fcgi/index' ... Dan dalam log kesalahan, 'klien ditolak oleh konfigurasi server: / usr / lib / cgi-bin /php5.fcgi '... Ada ide? - Just Lucky Really
Figured it out ... Saya menggunakan 'orde lama menyangkal, memungkinkan' konfigurasi untuk root untuk beberapa alasan ... Semua tetap sekarang: D - Just Lucky Really
Saya mendapatkan kesalahan berikut setelah instalasi paket dan konfigurasi "apache2: sintaks error pada baris 216 dari /etc/apache2/apache2.conf: Kesalahan sintaks pada baris 9 dari /etc/apache2/conf-enabled/php5-fpm.conf: Diharapkan </ Direktori> tetapi lihat </ IfModule> " - Farooq


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

Catatan untuk yang baru:

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

sudo su

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

Mulai

Langkah pertama: Instal MPM Pekerja Apache (Modul Multi-Procesing)

sudo apt-get install apache2-mpm-worker

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

Langkah 2: Pasang PHP5 dan modul yang diperlukan

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

Pada titik ini Anda mungkin mendapatkan kesalahan 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, the multiverse repositori harus ditambahkan ke sumber yang tepat.

Untuk melakukan ini:

sudo nano /etc/apt/sources.list

Untuk 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

precise dalam hal ini mengacu pada versi Ubuntu saya "Precise Pangolin".

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 Apache versi lama (2.3.x atau yang lebih lama), tinggalkan baris

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

Anda dapat memeriksa versi yang terinstal dengan perintah

apache2 -version

Anda dapat menempatkannya di konfigurasi Apache global (sehingga 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 seharusnya menggunakan PHP-FPM.

Saya memilih untuk mengikuti rute global, jadi:

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

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

restart Apache:

sudo service apache2 restart

Sekarang buat file PHP berikut di akar 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)

Dibawah API Server di bagian atas yang harus Anda lihat FPM/FastCGI.

Keberhasilan!

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


19
2017-12-16 15:43



Saya harus menambahkan ini sebelum </ IfModule>: <Direktori / usr / lib / cgi-bin> Memerlukan semua yang diberikan </ Direktori> - 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 jawabannya, karena tanpa itu Anda akan mendapatkan 403. - johnrom
Terima kasih untuk howto ini! Perhatikan bahwa Require all granted Hal hanya diperlukan sejak Apache 2.4. Jika saya meletakkannya di file konfigurasi dengan Apache 2.2, itu gagal. - leemes
Saya telah menambahkan catatan. (Jangan ragu untuk mengeditnya; ini adalah posting Anda.;)) Untuk detailnya, lihat stackoverflow.com/a/22040167/592323 - leemes
Jawaban ini tidak bekerja di ubuntu 14.04. Lihat jawaban oleh JDawgg untuk melakukannya di 14.04. - Bhavin Doshi


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

1
2017-09-21 15:34





Dalam kasus seseorang melakukan ini pada 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 untuk:

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 seperti yang 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 itu 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 lainnya seperti saya :)


0
2017-10-22 23:35