Frage PHP-FPM und Nginx: 502 schlechtes Gateway


Aufbau

  • Ubuntu Server 11.10 64 Bit
  • Amazon AWS, Ec2, gehostet in der Cloud
  • t1.micro-Instanz

Bevor ich noch etwas schreibe, möchte ich sagen, dass ich beides überprüft habe nginx 502 schlechtes Gateway und Nginx + PHP-FPM 502 Schlechtes Gateway Threads, die mir in dieser Hinsicht leider nicht geholfen haben.

Das Problem scheint ziemlich häufig zu sein: Eine Fehlkonfiguration von nginx oder php-fpm kann zu einem führen 502 Bad Gateway Fehler, den ich nicht loswerden konnte. Beachten Sie, dass dies angezeigt wird auch wenn ich zu meiner Domain root gehe, ohne ein bestimmtes Verzeichnis anzugeben.

Ich betreibe einen Amazon EC2-Webserver mit aktiviertem Port 9000, Port 80 geöffnet usw.

Die Frage ist insbesondere, wie kann ich diesen ekligen Fehler loswerden? Oder, noch besser, wie kann ich bekommen php5-fpm zu tatsächlich arbeiten.

Was ich bisher versucht habe

Meist konsistente Bearbeitung von Konfigurationsdateien, insbesondere php-fpm.conf und nginx.conf.

ich.  php-fpm.conf

Ich habe folgendes hinzugefügt, was nicht sehr geholfen hat:

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

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

Jetzt, nachdem ich versucht habe, meine Konfigurationsdateien einzufügen:

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

Was mich nur noch weiter verschraubt hat.

Vollständige Konfiguration

;;;;;;;;;;;;;;;;;;;;;
; 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

Ehrlich gesagt, diese Konfiguration ist ein paar der wenigen Websites, die ich besucht habe, aber ich kann Ihnen sagen, dass vor diesem 502 Bad Gateway-Geschäft der Server lief gut (ohne PHP funktioniert. Zeitraum.).

Das Problem liegt vor allem darin, dass etwas schrecklich furchtbar falsch ist. Und jetzt, wenn ich versuche, ein service php5-fpm restarthängt es in dem, was ich vermute, ist eine Endlosschleife oder etwas, was ich nicht einmal kann STRG-C aus.

Vollständige Konfiguration

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;
    }
}

75
2018-04-04 01:50


Ursprung


Antworten:


Wenn jemand diese Seite findet, wenn ich auf dasselbe Problem stoße, das ich hatte, fand ich die Antwort hier: http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ubuntu-12.04-lts

Für diejenigen von euch, die nicht daran interessiert sind zu klicken und es für sich selbst auszuarbeiten ...;)

Die Bedingung:

Ubuntu oder Debian-Server mit NGINX und PHP 5.3 funktioniert gut, aber Upgrade von PHP auf 5.4 gibt 502 Bad Gateway Fehler. Suchen nach Diensten, die auf Port 9000 ausgeführt werden (normalerweise ausgeführt netstat -lp oder ähnlich) gibt nichts zurück.

Die Reparatur:

Öffnen /etc/php5/fpm/pool.d/www.conf und notieren Sie sich den 'listen' Parameter (in meinem Fall /var/run/php5-fpm.sock):

; 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

Ersetzen Sie die Variable fastcgi_pass in Ihrem vhost durch den Ort, den Sie gerade notiert haben.

Also dieses Beispiel symfony2 Konfiguration (von hier aus: 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;
  }

wird das:

  # 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;
  }

Dann starte nginx neu:

sudo /etc/init.d/nginx restart

Hinweis: ersetzen ~ ^/(app|app_dev)\.php(/|$) { mit ~ ^/index\.php(/|$) { wenn du nicht auf SF2 bist **

Hoffe das spart jemandem ein bisschen Zeit :)

Bearbeiten

Natürlich könntest du das ändern listen = /var/run/php5-fpm.sock zu listen = 127.0.0.1:9000 im /etc/php5/fpm/pool.d/www.conf dann starte php5-fpm neu (was dich davor bewahren würde, deine vhosts zu ändern), aber du musst annehmen, dass sie php5-fpm geändert haben, um durch einen Socket zu laufen, anstatt Port 9000 aus einem bestimmten Grund zu hören.

Bearbeiten2

Wenn der Fehler 502 weiterhin auftritt, lesen Sie die folgende Antwort: nginx Fehler Verbindung zu php5-fpm.sock ist fehlgeschlagen (13: Berechtigung verweigert)


151
2018-01-28 10:40



Versuchen Sie diese Werte zu setzen, es löst das Problem in Fast-CGI

fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;

28
2018-05-22 06:51



Ich machte all diese ähnlichen Verbesserungen, aber von Zeit zu Zeit bekam ich 501/502 Fehler (täglich).

Das sind meine Einstellungen an /etc/php5/fpm/pool.d/www.conf um 501 und 502 nginx Fehler zu vermeiden ... Der Server verfügt über 16 GB RAM. Diese Konfiguration ist für einen 8 GB RAM-Server, also ...

sudo nano /etc/php5/fpm/pool.d/www.conf

Stellen Sie dann die folgenden Werte für ein

pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500

Nach diesen Änderungen starte php-fpm neu

sudo service php-fpm restart

10
2017-12-22 00:58



Wenn Sie das Problem nach dem upgrade von php-fpm wie mir getroffen haben, versuchen Sie Folgendes: Öffnen Sie /etc/php5/fpm/pool.d/www.conf Die folgenden Zeilen auskommentieren:

listen.owner = www-data
listen.group = www-data
listen.mode = 0666

dann starte php-fpm neu.


4
2018-01-30 05:25



Vergiss das nicht php-fpm ist ein Service. Stellen Sie nach der Installation sicher, dass Sie es starten:

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

3
2018-06-11 06:45



Für alle anderen, die damit fertigwerden wollen, habe ich versucht, Timeouts wie vorgeschlagen einzustellen, da ich nicht aufhören wollte, Unix-Sockets zu benutzen ... Nach vielen Fehlersuchen und nicht viel weiter, stellte ich fest, dass dieses Problem verursacht wurde von der APC-Erweiterung, die ich in php-fpm vor ein paar Monaten aktiviert hatte. Durch das Deaktivieren dieser Erweiterung wurden die intermittierenden 502-Fehler behoben. Der einfachste Weg dazu bestand darin, die folgende Zeile auszukommentieren:

;extension = apc.so

Das hat den Trick für mich gemacht!


2
2018-06-23 18:40



Der Port wurde in 5.4 in 9001 geändert, nur der Port wurde von 9000 auf 9001 im nginx conf geändert und in der php-fpm Konfiguration funktionierte für mich.


1
2017-08-04 07:07



Ich hoffe, dieser Tipp wird das Leben eines anderen retten. In meinem Fall war das Problem, dass ich nicht mehr genügend Speicher hatte, aber nur leicht, war schwer darüber nachzudenken. Verschwendet 3 Stunden darauf. Ich empfehle zu rennen:

sudo htop

oder

sudo free -m

... zusammen mit problematischen Anfragen auf dem Server, um zu sehen, ob Ihr Speicher nicht leer ist. Und wenn es in meinem Fall funktioniert, müssen Sie eine Auslagerungsdatei erstellen (es sei denn, Sie haben bereits eine).

Ich bin diesem Tutorial gefolgt, um eine Auslagerungsdatei auf Ubuntu Server 14.04 zu erstellen und es funktionierte gut: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/


1
2018-02-12 15:37