Apache'yi Ubuntu 12.04'te PHP'yi FastCGI olarak çalıştırmak için terminal üzerinden nasıl yapılandırabilirim?


35

Unix komut satırı web sunucusu yönetimi / yönetimi dünyasında nispeten yeniyim.

Kontrol paneli yönetim seçeneklerine sahip birçok ana bilgisayar, PHP'nin basit bir seçenekle nasıl çalıştığını değiştirmenize izin verir.

En yaygın seçenekler:

  • apache modülü
  • CGI uygulaması
  • FastCGI uygulaması

Benim sorum basitçe, bunu komut satırı üzerinden nasıl değiştirirsiniz? Apache için birçok yapılandırma dosyası olduğunu biliyorum.

Bulduğum en yakın şey bu soru , ancak dizin yapısı işletim sistemim için uygun görünmüyor (Ubuntu 12.04).

Çok yaygın gibi görünen bir şey için bu süreci detaylandırabileceğim konusunda net bir rehber olmadığına hayret ediyorum. Eğer varsa, beni affet ... eğer öyleyse, lütfen beni doğru yöne yönlendir.


Bulduğum en yakın şey SO'da bu soru. Bu web sitesi Yığın Taşması değil.
ta.speot.is 17:13

1
Bu Fastcgi oldukça iyi açıklıyor.

1
@ ta.speot.is affetmek, rica ederim . . Teşekkürler Matt, elbette fastcgi.com'a baktım ama bu talimatları takip etmekte zorlandım.
Evan Mattson

@ ta.speot.is, Basit yazım hatası. "SE" demek, "SO" demek istemedi.
Pacerier

Yanıtlar:


49

Önceki cevaplar için teşekkür ederim, beni çok etkilediler, ancak işleri yürütmek için birkaç yerden talimatları birleştirmek zorunda kaldım, bu yüzden tam bir komut seti yazacağımı düşündüm.

FYI Ubuntu 14.04, Apache 2.4 kullanıyorum ve ayrıca varsayılan olarak modphp çalışıyordu, önceki talimatlar da modphp'yi devre dışı bırakma gereğini bıraktı.

Ayrıca http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ çok bilgilendirici ve anlaşılır buldum .

Sadece aşağıdaki komutları arka arkaya terminalde çalıştırın.

Öncelikle gerekli paketleri kurun (bu zaten kurulu olduğunu varsaydığı için php5'i dışarıda bıraktım, ilk kurulum için tekrar ekleyin). Ayrıca Apache 2.4'ten, işçi yerine mpm olayını kullanabileceğinizi not edin: http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ adresini ziyaret edin . Örneğim işçi gösteriyor, ancak kullanmayı tercih ediyorsanız, işçi kelimesini yalnızca olayla değiştirin.

sudo apt-get install apache2-mpm-worker

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

Şimdi ihtiyacınız olan modları etkinleştirin ve istemediğinizleri devre dışı bırakın.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Php5.fcgi dosyasını oluşturun ve web sunucusuna kullanma izni verin.

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

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

Php5-fpm için global bir yapılandırma oluşturun

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

aşağıya yapıştırın (IP adresi yerine bir soket kullanacağız)

<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>

Php5-fpm conf'i etkinleştir

sudo a2enconf php5-fpm

Apache ve fpm'yi yeniden başlat

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

Diğer talimatlara göre, aşağıdakileri web sunucunuzdaki göz atılabilir yeni bir php dosyasına yapıştırın.

<?php phpinfo();

Yeni düzenlediğiniz dosyayı bir web tarayıcısında açın, Sunucu API'sinin yanında "FPM / FastCGI" görürseniz, şimdi PHP'de FastCGI!


4
Bu bir cankurtaran. Eski apache için talimatlar Ubuntu 14.04 ve apache 2.4 üzerinde işe yaramadı; ama bu bir çekicilik gibi çalıştı. +100 !!
Bhavin Doshi

Bunu tam olarak takip ettim, ancak '/php5.fcgi/index'e erişim izniniz yok' hatası alıyorum ... Ve hata günlüğünde 'istemci sunucu yapılandırması tarafından reddedildi: / usr / lib / cgi-bin /php5.fcgi '... Herhangi bir fikriniz var mı?
Sadece Şanslı Gerçekten

Anladım ... Eski 'sipariş inkar, izin ver' kökünün bir nedenden ötürü konfigürasyonunu kullanıyordum ... Hepsi düzeltildi: D
Sadece Şanslı Gerçekten

"Apache2: /etc/apache2/apache2.conf dosyasının 216 satırındaki sözdizimi hatası:" apache2: paketlerinin ve yapılandırmasının kurulumundan sonra şu hatayı aldım: /etc/apache2/conf-enabled/php5-fpm.conf dosyasının 9. satırında sözdizimi hatası: Expected </Directory> ama gördüm </IfModule> "
Farooq


20

Sonunda sadece bunu yapmaya yönelik güzel bir rehber buldum. LAMP yığımı kurmuş olduğumdan attığım adımları anlatacağım ancak öğreticinin tamamı burada bulunabilir .

Yeni için not:

Eğitimde, kök kullanıcıya geçiş yaparak başlar:

sudo su

Benim durumumda sudokullanıcıları değiştirmek yerine sadece bu komutları ön ekledim , bu yüzden adımlarımı bu şekilde belgeleyeceğim.

Başla

Birinci adım: Apache Worker MPM'yi (Çok İşlemli Modüller) yükleyin

sudo apt-get install apache2-mpm-worker

Bu, Apache'yi yüklerken varsayılan olan yüklediğim ön orjinalinin yerine geçer.

Adım 2: PHP5 ve gerekli modülleri kurun

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

Bu noktada 'libapache2-mod-fastcgi' yüklerken bir hatayla karşılaşabilirsiniz:

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

Bu bölüm yukarıdaki derste yer almıyor

Bunu uzlaştırmak için, multiversedepo apt kaynaklarına eklenmelidir.

Bunu yapmak için:

sudo nano /etc/apt/sources.list

Aşağıdaki satırları eklediğim:

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

preciseBu durumda Ubuntu " Precise Pangolin " versiyonuma atıfta bulunuyor .

Şimdi, bu değişiklikleri kaydedin ve terminale dönün:

sudo apt-get update

ve yeniden:

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

hangi şimdi çalışacak (gerekir).

Şimdi bu Apache modüllerini etkinleştirin:

sudo a2enmod actions fastcgi alias

apache'yi yeniden başlat

sudo service apache2 restart

Adım 3: Apache yapılandırması

Apache'nin PHP-FPM ile çalışmasını sağlamak için aşağıdaki konfigürasyona ihtiyacımız var:

<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>

Not:

Apache'nin daha eski bir sürümünü kullanıyorsanız (2.3.x veya daha eski), satırdan çıkın.

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

Yüklü versiyonunuzu komutla kontrol edebilirsiniz.

apache2 -version

Bunu, genel Apache konfigürasyonuna koyabilir (böylece tüm vhost'lar için etkindir), örneğin /etc/apache2/conf.d/php5-fpm.conf(bu dosya mevcut değil, bu yüzden onu oluşturmalısınız) veya PHP-FPM kullanması gereken her vhost'a yerleştirebilirsiniz.

Global rotaya gitmeyi seçiyorum.

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

Yukarıdaki kod bloğuna yapıştırın ve kaydedin, çıkın. Bu yeni dosya Apache'nin /etc/apache2/conf.d/dizindeki tüm dosyaları yükleyen varsayılan konfigürasyonu tarafından otomatik olarak yüklenecektir .

Apache'yi yeniden başlatın:

sudo service apache2 restart

Şimdi aşağıdaki PHP dosyasını belge kökünde oluşturun /var/www:

sudo nano /var/www/info.php

Eklemek:

<?php phpinfo();

kaydet çık.

Şimdi bu dosyayı bir tarayıcıda çağırıyoruz (örn. http://your-server-ip/info.php)

Altında Sunucu API üstünde görmeniz gerekir FPM/FastCGI.

Başarı!

PHP-FPM'yi varsayılan TCP bağlantı noktası yerine bir unix soket kullanmak üzere nasıl değiştireceğiniz veya bunların tümü yerine tek tek sanal ana bilgisayarlar için bunu yapılandıracağınız gibi daha fazla bilgi için, en üste bağlanan kaynak eğitimine bakın.


Bunu daha önce eklemek zorunda kaldım </IfModule>: <Directory / usr / lib / cgi-bin> Tüm verilenleri isteyin </Directory>
Rimu Atkinson

@RimuAtkinson doğrudur, varsayılan olarak tüm dizinlerin daha yeni sürümlerde kullanılması yasaktır, bu nedenle özellikle cgi-bin dizinine erişim vermeniz gerekir. Bu cevaba eklenmelidir, çünkü onsuz 403 alırsınız.
johnrom

Bunun için teşekkürler! Bunun Require all grantedyalnızca Apache 2.4'ten beri gerekli olduğunu unutmayın . Apache 2.2 ile yapılandırma dosyasına koyarsam, başarısız olur.
leemes

Bir not ekledim. (Düzenleme yapmaktan çekinmeyin; bu sizin gönderiniz.;)) Ayrıntılar için bkz. Stackoverflow.com/a/22040167/592323
leemes

1
Bu cevap ubuntu 14.04 üzerinde çalışmıyor. 14.04'te yapmak için JDawgg'ın cevabına bakınız.
Bhavin Doshi

1

Ubuntu 14.04'te kabul edilen cevabın adımlarını uyguladıktan sonra /etc/apache2/conf-available/php5-fpm.conf dosyasını düzenleyin.

<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>

Sonra yürüt

#sudo a2enconf php5-fpm
#sudo apache2 restart

0

Birisi Ubuntu 16.04’te bunu yapıyorsa ve php 7’den php 5.6’ya (Ondrej) indirilmişse, bazı satırları değiştirmeniz gerekir (JDawgg'in cevabına dayanarak):

sudo apt-get yüklemek libapache2-mod-fastcgi php5-fpm için:

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

sudo a2dismod php5 mpm_prefork için:

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-available/php5-fpm.conf için:

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

Php5.6-fpm kurulum işlemi dosyayı zaten yarattı, dolayısıyla bir tane oluşturmanıza gerek kalmadı. Ancak, o dosyadaki mevcut tüm metni mod_php5 için olduğu gibi kaldırdım.

<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>

Dosyayı burada bulunduğu için /var/run/php5-fpm.sock ile /var/run/php/php5.6-fpm.sock dizinine değiştirdim.

sudo a2enconf php5-fpm için:

sudo a2enconf php5.6-fpm

sudo servis apache2 yeniden başlat && sudo servis php5-fpm yeniden başlat:

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

Umarım bu benim gibi diğer yenilere yardımcı olur :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.