Comment configurer NGINX + PHP5-FPM pour réserver des emplacements de connexion pour une plage d’adresses IP spécifique?

Lors de rares utilisations de pointe, mon serveur est à court d’enfants disponibles PHP5 disponibles (je ne peux pas augmenter ce nombre sans risquer de manquer de mémoire). Il est quelque peu acceptable pour moi si un utilisateur final reçoit un message 503 ou 504 dans un cas rare, mais il y a des demandes d’API de clients spécifiques sur mon serveur que je souhaite être toujours accessible à certaines plages d’adresses IP.

Existe-t-il un moyen de spécifier une limite sur les demandes de transfert fastcgi provenant de certaines plages d’adresses IP, puis d’autoriser 5 à 10 “emplacements de connexion réservés” supplémentaires pour les demandes provenant d’une autre plage IP? C’est en quelque sorte ce que je pense:

php5-fpm max children: 100 max fastcgi connections for standard IP range: 90 max fastcgi connections for "priority" IP range: 100 

En réservant essentiellement ces 10 derniers processus enfants pour certains clients.

Je pensais essayer d’utiliser worker_connections / worker_processes pour ces limites, mais avec leur context étant des events n’y a-t-il aucun moyen de les faire varier selon la demande IP?

    Vous pouvez append un autre pool et configurer nginx pour l’utiliser pour les adresses IP réservées. L’inconvénient est que les clients de cette plage d’adresses IP ne peuvent pas utiliser le pool “commun” qui pourrait ne pas être acceptable dans certains cas d’utilisation.

    Fondamentalement, si vous copiez:

     cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/www-special.conf 

    changez le socket:

     sed -i 's/listen = \/var\/run\/php5-fpm.sock/listen = \/var\/run\/php5-fpm-special.sock/g' \ /etc/php5/fpm/pool.d/www-special.conf 

    et ajustez pm.max_children à 90 et 10 dans chaque fichier:

     sed -i 's/pm.max_children = .\+/pm.max_children = 90/g' \ /etc/php5/fpm/pool.d/www.conf sed -i 's/pm.max_children = .\+/pm.max_children = 10/g' \ /etc/php5/fpm/pool.d/www-special.conf 

    vous pouvez utiliser un nouveau pool pour la plage d’IP sélectionnée dans nginx config (n’oubliez pas de redémarrer le service php5-fpm restart ).

    Par exemple, avec le module geo , vous pouvez définir $socket dans /etc/nginx/conf.d/geo.conf comme /etc/nginx/conf.d/geo.conf :

     geo $socket { default unix:/var/run/php5-fpm.sock; 10.0.0.0/8 unix:/var/run/php5-fpm-special.sock; } 

    Et ensuite, mettez à jour les directives fastcgi_pass pour l’utiliser:

     sed -i 's/fastcgi_pass unix:\/var\/run\/php5-fpm.sock;/fastcgi_pass $socket;/g' \ /etc/nginx/sites-available/default