Nginx + PHP-FPM inrichten met TCP sockets per pool

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
Hi all,

Ik draai een Linux server met Nginx en PHP-FPM met meerdere site's in elk een eigen directory. Momenteel draaien alle site's in de zelfde php-fpm pool, namelijk www-data. Ik zou graag elke site in een eigen php-fpm pool willen draaien, dus daarvoor heb ik deze howto gevolgd: https://www.howtoforge.co...nvironments-debian-ubuntu

Om een of andere manier lukt het me niet het aan de praat te krijgen. Hoop dat een van jullie me op weg kan helpen :-(..

Mijn startpunt configuratie (deeltjes uit de configfiles. Voor wie meer wil zien, roept u maar):

/etc/php5/fpm/pool.d/www.conf
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 400
chdir = /


(deeltje uit) /etc/nginx/sites-available/site1.conf
code:
1
2
3
4
5
6
7
8
9
10
11
include /etc/nginx/default-config.new.conf;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
}


Ik heb een nieuwe pool aangemaakt, namelijk /etc/php5/fpm/pool.d/testpool.conf, met daar in:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
[testuser1]
user = testuser1
group = testuser1
listen = 127.0.0.1:9001
listen.owner = testuser1
listen.group = testuser1
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 400
chdir = /


En ik heb in de nginx vhost file van die user de volgende instelling gemaakt:

(deeltje uit) /etc/nginx/sites-available/testuser1.conf
code:
1
2
3
4
5
6
7
8
9
10
11
include /etc/nginx/default-config.new.conf;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass 127.0.0.1:9001;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
}


Als ik daarna de php-fpm en nginx services reload en restart, dan geeft vervolgens elke pagina op de site een "502 Bad Gateway" :'(

Als ik de nginx error.log bekijk, zie ik het volgende:

code:
1
2015/01/08 20:21:42 [error] 11844#0: *19 connect() failed (111: Connection refused) while connecting to upstream, client: **.82.**.104, server: servernaam.nl, request: "POST /index.php HTTP/1.0", upstream: "fastcgi://127.0.0.1:9001", host: "testuser1.nl"


Ik heb verschillende tutorials geprobeerd maar het schijnt allemaal niet zo heel ingewikkeld te zijn. Maar, toch blijf ik tegen dit issue aan lopen :-(.

Hoop op jullie hulp! *O*

Acties:
  • 0 Henk 'm!

Verwijderd

Bestaat die user testuser1 ook?
Luistert er een socket op poort 9001? (lsof -i tcp:9001)

Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
Verwijderd schreef op donderdag 08 januari 2015 @ 20:35:
Bestaat die user testuser1 ook?
Luistert er een socket op poort 9001? (lsof -i tcp:9001)
De user heeft in het echt een andere naam, maar de gebruikte naam bestaat inderdaad wel ja :-).

Als ik "lsof -i tcp:9001" doe, krijg ik blanco. Ik denk dus dat er geen socket luistert. Waar heb ik iets gemist?

Acties:
  • 0 Henk 'm!

  • ktf
  • Registratie: Maart 2007
  • Laatst online: 01-10 12:10

ktf

De poort luistert blijkbaar alleen naar de loopback interface (127.0.0.1), terwijl de log aangeeft dat je niet via de loopback interface aanroept. Kan dat misschien het probleem zijn?
Vast niet, want dat is natuurlijk alleen voor de fastcgi :P

[ Voor 15% gewijzigd door ktf op 08-01-2015 20:45 ]


Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 01:23

Blokker_1999

Full steam ahead

Ik heb even uw config in mijn systeem geplakt, en die doet het gewoon

code:
1
2
3
4
5
6
7
8
root@10Forward:~# lsof -i tcp:9001
COMMAND    PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
php5-fpm 26009 root    8u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)
php5-fpm 26012 hans    0u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)
php5-fpm 26013 hans    0u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)
php5-fpm 26014 hans    0u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)
php5-fpm 26015 hans    0u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)
php5-fpm 26016 hans    0u  IPv4 634884391      0t0  TCP localhost:9001 (LISTEN)


staat er toevallig een (nuttige) foutboodschap in de log van php-fpm (cat /var/log/php5-fpm.log)?

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 20-09 17:01
Gelukt!!! De opmerking van Cheatah heeft me aan het denken gezet. Nu blijkt dat als je php-fpm reload middels:

/etc/init.d/php5-fpm reload

de pool niet gestart wordt. Kortom, er luisterde niets op 9001. Hiervoor moet je:

service php5-fpm reload

doen :-)

Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 01:23

Blokker_1999

Full steam ahead

zelf vertrouw ik reloads niet snel en zal zo goed als altijd een restart vragen. Kan zelf het zoeken of er een verschil is daar jessie over is op systemd en alles uitvoert via systemctl ipv de init.d scripts.

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

Verwijderd

Meestal wordt een reload gedaan door een SIGHUP signal naar een proces te sturen, maar het is maar net wat de software ermee doet. Het opnieuw openen van een socket kan alleen als dit op een hoog portnummer gebeurt of als root. Een proces dat privileges dropt kan soms iets helemaal niet meer, zals van user switchen of op een laag poortnummer gaan luisteren. Een restart van het proces garandeert een schone lei. Het ligt er ook maar aan he lui de programmeurs waren. Het is best ingewikkeld om de running config gelijk te maken aan de configuratiebestanden als het proces met een andere comnfiguratie is gestart. Niet elke developer doet de moeite om dat helemaal netjes te maken.

Maar fijn dat het is opgelost :)

Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Gewoon een vraag: Waarom doe je het niet over een socket?
Sockets zijn sneller en makkelijker te debuggen (in mijn geval).

Acties:
  • 0 Henk 'm!

Verwijderd

Over een unix socket bedoel je? Als de service alleen lokaal draait is dat wel het best ja.

Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Verwijderd schreef op vrijdag 09 januari 2015 @ 19:00:
Over een unix socket bedoel je? Als de service alleen lokaal draait is dat wel het best ja.
Inderdaad doelde als unix socket.

Het heeft (in mijn ogen) alleen zin om niet op een socket te luisteren, als je deze wilt gebruiken over andere servers.

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 01-10 12:22

CAPSLOCK2000

zie teletekst pagina 888

Sterker nog, als je verschillende pools wil gebruiken om voor de veiligheid je websites onder verschillende gebruikers te draaien _moet_ je wel unix-sockets gebruiken. Aan unix-sockets kun je gebruikers en rechten hangen, aan tcp-sockets (bijna) niet. Ieder proces op je systeem mag met die tcp-socket praten.

This post is warranted for the full amount you paid me for it.

Pagina: 1