Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Apache + mod_fastcgi + php-fpm - jak używać?
Forum PHP.pl > Forum > Serwery WWW > Apache
elektrrrus
Witam

Chciałbym się zapytać bardziej doświadczonych kolegów w jaki sposób używają takiego połączenia. Pierwsza możliwość jaką znalazłem, to użycie dyrektywy FastCgiExternalServer i przekierowanie przez nie wywołań na fpm nasłuchujące na jakimś porcie lub sockecie. Problem w tym, że nie udało mi się zmusić apacha do przekierowania na fpm tylko rządań o pliki .php, i uparcie wysyła wszystko na interpereter php. Nie muszę chyba wspominać że nie o to chodziło. Mimo kombinacji takich jak opisanych na http://devrandom.pl/blog/2009/05/09/apache...cgi-spawn-fcgi/ (nieistniejący w systemie plików handler) nie udało mi się tego zmusić do poprawnej pracy. Druga metoda jest opisana na np: http://www.cyberciti.biz/tips/rhel-centos-...figuration.html Tworzomy tutaj plik z wywołaniem php_fpm jako wykonywalny skrypt basha i skorzystanie z klasycznego przekierowania jako cgi. To działa, ale czy nie tracę na tym wydajości? Wydaje mi się że po to była idea zdemonizowania php i łączenia się do niego przez socket albo port, żeby teraz wracać z powrotem do wykonywalnego pliku.
Niestety musze użyć apache, z nginx działa to bezproblemowo, ale nic na to nie poradzę. Czy macie może jakieś swoje doświadczenia w tej kwestii? Może da się jakoś zmusić apache żeby działał prawidłowo z FastCgiExternalServer ?

EDIT: Wpakowanie FastCgiExternalServer do bolku files wybierającego tylko pliki php skutuje błedem: FastCgiExternalServer not allowed here


Problem dawno rozwiązany, trzeba było skorzystać z "wirtualnego" handlera cgi-bin w postaci nieistniejącego pliku, podeśle linka jak to wygrzebie, w każdym razie zasada działania była troche inna niż to rozwiązanie z http://devrandom.pl
pustka
Witam,

Pozwolę sobie odświeżyć temat, gdyż od 2 dni krążę po googlach w poszukiwaniu rozwiązania tego właśnie tematu. A kolejne tutoriale nie sprawdzają się w mojej sytuacji.

Apache 2.2 na debianie 2.6.26-1-amd64. I na tym multisite drupal. Moduły do apache konfigurowane w /etc/apache2/modules-enabled/ a virtual hosty w /etc/apache2/sites-enabled/
I nie mogę dojść jak ma być skonfigurowany moduł mod_FastCGI w /etc/apache2/modules-enagled/fastcgi.conf i fpm w /etc/php5/fpm/php-fpm.conf plus ewentualne wpisy w plikach do virtual host, żeby to działało.

Próbuję takich rzeczy jak:
http://blog.danguer.com/2011/10/10/install...pm-and-apache2/
http://zeldor.biz/2011/03/apache2-and-php5-fpm-combination/
http://alexcabal.com/installing-apache-mod...erver-maverick/

Na oficjalnej stronie fpm dokumentacji brak, piszą coś o integracji z php i że na stronie php powinna być dokumentacja. Na stronie php tylko opis dyrektyw.
Bardzo możliwe że któryś z powyższych linków przedstawia dobre rozwiązanie tylko ja coś po drodze nie tak zrobiłem.
Jeśli ktoś miał do czynienia z taką konfiguracją, to bardzo proszę o pomoc.
erix
php-fpm jest banalnie prosty w konfiguracji. Jeśli go skompilujesz, jedyną rzeczą, jakiej potrzebujesz, to binarka php-fpm.

Potem konfigurujesz odpowiednio pule i startujesz demona (czyli php-fpm, bo działa on niezależnie). Masz już respondera do FCGI.

W konfiguracji Apache pozostaje już tylko nakierować na respondera (gniazdem, czy adresem IP + portem).

Pokaż, co masz teraz, wtedy coś powiemy.

Aha, i zastanów się, na co Ci taka kobyła jak Apache.
pustka
To może zacznijmy od początku. Przywróciłem sobie mój testowy vps do stanu zanim zacząłem mieszać, czyli do apache z mpm-prefork (kobylasty apache dlatego że nie ja o tym decyduję smile.gif ).
I teraz powinienem sobie zapodać coś w stylu:

Kod
apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm


Zgadza się ?
erix
Ekhm, może jestem staroświecki, ale ja takie rzeczy kompiluję.

Wolę:
Kod
cd /usr/ports/www/nginx
make config install clean

cd /usr/ports/lang/php5
make config install clean

ale to przecież nie BSD... biggrin.gif
pustka
Gdzie tam staroświecki smile.gif Po prostu w tym przypadku instaluję z paczek i tyle ;>

A więc do rzeczy. Po zainstalowaniu powyższych pakietów mam:

mods-enabled/fastcgi.conf
Kod
<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  #FastCgiWrapper /usr/lib/apache2/suexec
  FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>


/etc/php5/fpm/php-fpm.conf
Kod
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
include=/etc/php5/fpm/pool.d/*.conf


/etc/php5/fpm/pool.d/www.conf
Kod
[www]
listen = 127.0.0.1:9000
user = www-data
group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chdir = /
erix
No ok, ale gdzie podajesz w konfiguracji Apache lokalizację repondera?

Demon FPM wystartowany?
pustka
demonik sobie pomyka:
Kod
8060 ?        00:00:13 php5-fpm
8061 ?        00:00:00 php5-fpm
8064 ?        00:00:00 php5-fpm
8067 ?        00:00:00 php5-fpm
8071 ?        00:00:00 php5-fpm


No a "lokalizacje respondera" dopiero muszę ustawić.

Na początek może coś takiego, ale to pewnie jeszcze nie wszystko, bo nie działa ;>
Tylko czy w ogóle w dobrym kierunku idę ?
Kod
<IfModule mod_fastcgi.c>
  #AddHandler fastcgi-script .fcgi
  AddHandler fcgi:/var/run/php-fpm.socket .php .php5
  #FastCgiWrapper /usr/lib/apache2/suexec
  FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>


i w
zmieniłem /etc/php5/fpm/pool.d/www.conf z portu na socketa
Kod
listen = /var/run/php-fpm.socket
erix
Cytat
Tylko czy w ogóle w dobrym kierunku idę ?

Nie trać swojego i naszego czasu. Oberwałbyś od klawiatury, gdybyś to już przetestował? To Tobie ma zależeć na rozwiązaniu problemu i to Ty masz być najbardziej zaangażowanym.

Apache już od dawna nie używam na produkcji, więc musisz sam przetestować; co do FPM, to no problem, ale z Apache musisz trochę samodzielnie podziałać.
pustka
Cytat(erix @ 21.12.2011, 20:08:09 ) *
Nie trać swojego i naszego czasu. Oberwałbyś od klawiatury, gdybyś to już przetestował? To Tobie ma zależeć na rozwiązaniu problemu i to Ty masz być najbardziej zaangażowanym.

Apache już od dawna nie używam na produkcji, więc musisz sam przetestować; co do FPM, to no problem, ale z Apache musisz trochę samodzielnie podziałać.


Może nie dotycztałeś jak wpierwszym poście napisałem że testowałem różne konfiguracje. I wszystko co piszę jest testowane.
Jeżeli nie potrafisz pomóc z apachem to szkoda, bo problem jest właśnie w skierowaniu apacha/fastcgi na fpm a nie z samym fpm.
erix
Cytat
Może nie dotycztałeś jak wpierwszym poście napisałem że testowałem różne konfiguracje.

To pokaż je. To, że testowałeś, to nie znaczy, że czegoś nie przeoczyłeś. A FastCGI dla Apache jest upierdliwe; kiedyś to postawiłem, "nigdy więcej". Skopiowałbym swoją konfigurację, ale na tamtym serwerze już jest coś innego, poza tym - wówczas nie było PHP-FPM.

pustka
Wygląda na to że przy kolejnym podejściu udało mi się uzyskać działające rozwiązanie łącząc zawartość dwóch stron:

http://personal.x-istence.com/post/2010/11...and-php-php-fpm
Stąd wziąłem konfigurację fastcgi:
Kod
<IfModule mod_fastcgi.c>
        Alias /php5.fcgi /var/www/fastcgi/php5.fcgi
        FastCGIExternalServer /var/www/fastcgi/php5.fcgi -flush -host 127.0.0.1:9000
        AddType application/x-httpd-fastphp5 .php
        Action application/x-httpd-fastphp5 /php5.fcgi

        <Directory "/var/www/fastcgi/">
                Order deny,allow
                Deny from all
                <Files "php5.fcgi">
                        Order allow,deny
                        Allow from all
                </Files>
        </Directory>
</IfModule>


http://blog.danguer.com/2011/10/10/install...pm-and-apache2/
A stąd poradę o rewrite rule (z racji że używam drupala, bez tego miałem pętle):

Kod
RewriteRule ^fastcgi/php5.fcgi - [L,NC]


Teraz czeka mnie sprawdzenie czy na serwerze produkcyjnym gdzie do konfiguracji dochodzą virtual hosty będzie to śmigać.
Dam znać jakie będą tego efekty, ale to pewnie po nowym roku dopiero.

A jeśli chodzi o fpm, to czy faktycznie warto używać unixowego socketa ? (listen = /var/run/php-fpm.socket) Na, jednej ze stron spotkałem się ze stwierdzeniem że jest to szybsze rozwiązanie.
erix
Pewnie, że szybsze, bo ustanowienie połączenia TCP jest "trochę" zasobożerne. Ale dlaczego, to zapraszam do lektury podstaw sieci komputerowych. [;

Tylko że sockety mają jedną wadę - responder musi być na tej samej maszynie, co usługa kliencka. W Twoim przypadku jest to jednak bez znaczenia. [;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.