78 votes

PHP-FPM et Nginx: 502 passerelle incorrecte

Configuration

  • Le Serveur Ubuntu 11.10 64 bits
  • Amazon AWS, Ec2, hébergé sur le cloud
  • t1.micro instance

Avant de m'écrire quoi que ce soit d'autre, je tiens à préciser que j'ai vérifié les deux 502 bad gateway nginx et Nginx + PHP-FPM 502 Bad Gatway fils, qui, malheureusement, n'ont pas aidé moi à cet égard.

Le problème semble être assez commun: une mauvaise configuration de nginx ou php-fpm peut conduire à un 502 Bad Gatway d'erreur, ce qui est quelque chose que je n'ai pas été capable de se débarrasser de. Notez que cela s'affiche même quand je vais à mon domaine racine, sans préciser de répertoire particulier.

Je suis en cours d'exécution d'une instance Amazon ec2 serveur, avec le port 9000 activé, le port 80 ouvert, etc.

La question, en particulier, est, comment puis-je me débarrasser de cette vilaine erreur? Ou, mieux encore, comment puis-je obtenir de l' php5-fpm à réellement travailler.

Ce que j'Ai Essayé jusqu'à Présent

Plutôt uniformes de l'édition de fichiers de configuration, notamment php-fpm.conf et nginx.conf.

j'. php-fpm.conf

J'ai ajouté à la suivante, qui n'a pas beaucoup aidé:

;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;

;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35

Maintenant, par la suite j'ai essayé d'inclure mes fichiers de configuration:

include=/etc/php5/fpm/*.conf

Qui seule me visse encore plus loin.

Configuration Complète

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to PHP's install
; prefix (/usr). This prefix can be dynamicaly changed by using the
; '-p' argument from the command line.

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
;  - the global prefix if it's been set (-p arguement)
;  - /usr otherwise
;include=/etc/php5/fpm/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /var/run/php5-fpm.pid

; Error log file
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php5-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
log_level = notice

; If this number of child processes exit with SIGSEGV or SIGBUS within the time
; interval set by emergency_restart_interval then FPM will restart. A value
; of '0' means 'Off'.
; Default Value: 0
;emergency_restart_threshold = 0

; Interval of time used by emergency_restart_interval to determine when 
; a graceful restart will be initiated.  This can be useful to work around
; accidental corruptions in an accelerator's shared memory.
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
emergency_restart_interval = 0

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
;process_control_timeout = 0

; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging.
; Default Value: yes
daemonize = no

;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;

;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35

;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ; 
;;;;;;;;;;;;;;;;;;;;

; Multiple pools of child processes may be started with different listening
; ports and different management options.  The name of the pool will be
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)

; To configure the pools it is recommended to have one .conf file per
; pool in the following directory:
include=/etc/php5/fpm/pool.d/*.conf

ii. nginx.conf

En toute honnêteté, cette configuration est une poignée de quelques sites que j'ai visité, mais je peux vous dire qu'avant cette 502 Bad Gateway d'affaires, le serveur est en cours d'exécution fine (sans PHP de travail. Période.).

Le problème réside principalement dans le fait que quelque chose est terriblement, terriblement mal. Et maintenant, quand j'essaie de faire un service php5-fpm restart, il se bloque dans ce que je suppose est une boucle infinie ou quelque chose, je ne peux même pas CTRL-C de.

Configuration Complète

user www-data;
worker_processes 1;
pid /var/run/nginx.pid;

events {
    worker_connections 64;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush off;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    server {
        listen 80;
        server_name ec2-xx-xx-xx-xx.compute-x.amazonaws.com;

        location ~ ^(.+\.php)(.*)$ {
            root   /home/wayvac/public;
            fastcgi_pass   unix:/var/run/php5-fpm.pid;  
            #fastcgi_pass   127.0.0.1:9000; #Un-comment this and comment "fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;" if you are not using php-fpm.
            fastcgi_index  index.php;
            set $document_root2 $document_root;
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 $1$2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 $1$2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 $1$2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 $1$2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 $1$2; }
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param   SCRIPT_FILENAME $document_root2$fastcgi_script_name;
            fastcgi_param   PATH_INFO   $fastcgi_path_info;
            fastcgi_param   PATH_TRANSLATED $document_root2$fastcgi_path_info;
            include fastcgi_params;
            fastcgi_param  DOCUMENT_ROOT      $document_root2;
        }       

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        location / {
            root /home/wayvac/public;   
            index index.html index.htm index.php;
        }

        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        #include drop.conf;
        #include php.conf;
    }
}

151voto

Nealio Points 1731

Si quelqu'un trouve cette page en rencontrant le même problème que j'ai eu, j'ai trouvé la réponse ici: http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ubuntu-12.04-lts

Pour ceux d'entre vous qui ne peuvent pas être pris la peine de cliquer et de travailler pour eux-mêmes... ;)

La Condition:

Ubuntu ou Debian serveur avec NGINX et PHP 5.3 fonctionne très bien mais la mise à niveau de PHP 5.4 donne 502 Bad Gateway erreurs. À la recherche pour les services en cours d'exécution sur le port 9000 ne retourne rien.

Le correctif:

ouvrez le fichier /etc/php5/fpm/pool.d/www.conf et faire une note de "l'écoute" du paramètre (dans mon cas /var/run/php5-fpm.chaussette)

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock

et de remplacer le fastcgi_pass variable dans votre vhost avec l'emplacement que vous venez de noter

donc, cet exemple de configuration de symfony2 (prises à partir d'ici: http://wiki.nginx.org/Symfony)

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ ^/(app|app_dev)\.php(/|$) {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  HTTPS              off;
  }

devient:

  # pass the PHP scripts to FastCGI server at /var/run/php5-fpm.sock
  location ~ ^/(app|app_dev)\.php(/|$) {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  HTTPS              off;
  }

puis redémarrer nginx

sudo /etc/init.d/nginx restart

remarque remplacer ~ ^/(app|app_dev).(php/|$) {~ ^/index.php(/|$) { si vous n'êtes pas sur SF2**

Espérons que cela sauve quelqu'un un peu de temps :)

Modifier

Bien sûr, vous pouvez modifier l'écouter = /var/run/php5-fpm.chaussette pour écouter = 127.0.0.1:9000 dans /etc/php5/fpm/pool.d/www.conf puis redémarrez php5-fpm (qui pourrait vous éviter d'avoir à changer vos vhosts), mais vous avez à supposer qu'elles changé php5-fpm de courir à travers un socket plutôt que d'écouter sur le port 9000 pour une raison.

Edit2

Si vous rencontrez toujours des erreur 502 voir cette réponse: nginx erreur se connecter à php5-fpm.chaussette a échoué (13: Permission denied)

28voto

ananthan Points 249

Essayez de définir ces valeurs, cela résout le problème dans fast-cgi

 fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
 

3voto

Jakobud Points 14581

N'oubliez pas que php-fpm est un service. Après l'avoir installé, assurez-vous de le démarrer:

 # service php-fpm start
# chkconfig php-fpm on
 

1voto

Aaron Judd Points 28

Le port a été changé en 9001 en 5.4, le changement de port de 9000 à 9001 dans la configuration nginx et dans la configuration php-fpm a fonctionné pour moi.

-3voto

rafael Points 258

J'ai rencontré le même problème.

Essayez de changer d'utilisateur comme ci-dessous.

utilisateur www-data; worker_processes 1;

utilisateur nginx; worker_processes 1;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X