Cet article présente principalement comment installer et configurer php-fpm pour créer un environnement de production Nginx+PHP. La fonction de php-fpm est d'intégrer la gestion des processus FastCGI dans le package PHP. Les amis qui en ont besoin peuvent s'y référer. 🎜>
nginx lui-même ne peut pas gérer PHP. Il s'agit simplement d'un serveur Web. Lorsqu'une requête est reçue, s'il s'agit d'une requête PHP, elle sera envoyée à l'interpréteur PHP pour traitement et le résultat sera renvoyé au client. . nginx envoie généralement la demande au processus de gestion fastcgi pour traitement. Le processus de gestion fascgi sélectionne le résultat du traitement du sous-processus cgi et le renvoie à nginxCet article utilise php-fpm comme paramètre. exemple pour présenter comment faire en sorte que nginx prenne en charge PHP1 Compiler et installer php-fpm
Qu'est-ce que PHP-FPMC'est PHP-FPM. un gestionnaire PHP FastCGI, qui n'est utilisé que pour PHP. Il peut être téléchargé sur http://php-fpm.org/download PHP-FPM est en fait un patch de code source PHP, visant à intégrer FastCGI. gestion des processus dans le package PHP. Il doit être corrigé dans votre code source PHP et peut être utilisé après la compilation et l'installation de PHP. La nouvelle version de PHP a intégré php-fpm, qui n'est plus un package tiers, il est recommandé de l'utiliser. PHP-FPM fournit une meilleure méthode de gestion des processus PHP, peut contrôler efficacement la mémoire et les processus et recharger en douceur la configuration PHP. Il présente plus d'avantages que spawn-fcgi, il est donc officiellement inclus dans PHP. Vous pouvez activer PHP-FPM avec le paramètre –enable-fpm dans ./configure. D'autres paramètres sont configurés pour php. La signification spécifique des options peut être trouvée ici. Préparation avant installationExécuter sous centos
yum -y install gcc automake autoconf libtool make yum -y install gcc gcc-c++ glibc yum -y install libmcrypt-devel mhash-devel libxslt-devel
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel
wget http://cn2.php.net/distributions/php-5.4.7.tar.gz tar zvxf php-5.4.7.tar.gz cd php-5.4.7 ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt
--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --with-gd --with-jpeg-dir
make all install
.
cd /usr/local/php cp etc/php-fpm.conf.default etc/php-fpm.conf vi etc/php-fpm.conf
user = www-data group = www-data
groupadd www-data useradd -g www-data www-data
2. Compilez et installez nginx
3. Modifiez le fichier de configuration nginx pour prendre en charge php-fpm
Après l'installation de nginx. est terminé, modifiez le fichier de configuration nginx Ajoutez la configuration suivante à la section serveur de nginx.conf Faites attention à la configuration du contenu rouge, sinon l'erreur Aucun fichier d'entrée spécifié apparaîtra<🎜. >
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Créez un fichier php
Créez le fichier index.php sous /usr/local/nginx/html et entrez le contenu suivant
<?php echo phpinfo(); ?>
<🎜. >Démarrez php-fpm et nginx
/usr/local/php/sbin/php-fpm #手动打补丁的启动方式/usr/local/php/sbin/php-fpm start sudo /usr/local/nginx/nginx
6. Accès au navigateur
Visitez http:// Vous pouvez voir les informations php sur votre serveur ip/index.php.
7. Résolution d'erreur
Lorsque vous utilisez Nginx, vous rencontrez souvent 502 Bad Gateway. et 504 erreurs de délai d'attente de passerelle. Utilisons Nginx+PHP-FPM pour analyser les causes et les solutions de ces deux erreurs courantes.
Erreur 1.502 Bad Gateway
Il y a deux éléments de configuration respectivement dans php.ini et php-fpm.conf : max_execution_time et request_terminate_timeout. Ces deux éléments permettent de configurer le temps d'exécution maximum d'un script PHP. Lorsque ce délai est dépassé, PHP-FPM mettra non seulement fin à l'exécution du script,
mettra également fin au processus Worker exécutant le script. Par conséquent, Nginx constatera que la connexion pour communiquer avec lui-même est rompue et renverra une erreur 502 au client.
En prenant comme exemple request_terminate_timeout=30 secondes de PHP-FPM, les informations spécifiques de l'erreur 502 Bad Gateway sont les suivantes :
1) Journal d'accès aux erreurs Nginx :
2013/09/19 01:09:00 [error] 27600#0: *78887 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "test.com", referrer: "http://test.com/index.php"
WARNING: child 25708 exited on signal 15 (SIGTERM) after 21008.883410 seconds from start
donc si vous ne souhaitez pas modifier le php.ini global, modifiez simplement la configuration de PHP-FPM.
De plus, veuillez noter les éléments max_fail et fail_timeout dans le module en amont de Nginx. Parfois, la communication entre Nginx et le serveur en amont (tel que Tomcat, FastCGI) n'est interrompue qu'accidentellement
Mais si max_fail est défini sur une valeur relativement petite, alors dans le prochain délai d'échec, Nginx pensera que le serveur en amont est. vers le bas, et il renvoie une erreur 502.
2.504 Erreur d'expiration du délai de passerelle
PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置factcgi_connect/read/send_timeout。
以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:
2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "test.com", referrer: "http://test.com/index.php"
调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。
配置举例:
location ~ \.php$ { root /home/cdai/test.com; include fastcgi_params; fastcgi_connect_timeout 180; fastcgi_read_timeout 600; fastcgi_send_timeout 600; fastcgi_pass unix:/dev/shm/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/cdai/test.com$fastcgi_script_name; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!