Aufbau
- Ubuntu Server 11.10 64 Bit
- Amazon AWS, Ec2, gehostet in der Cloud
- t1.micro Instanz
Bevor ich etwas anderes schreiben, würde ich feststellen, dass ich beide überprüft habe nginx 502 falsches Gateway und Nginx + PHP-FPM 502 Bad Gateway - Threads, die leider mir in dieser Hinsicht nicht geholfen haben.
Das Problem scheint ziemlich häufig zu sein: Eine Fehlkonfiguration von nginx oder php-fpm kann zu einem 502 Bad Gateway
Fehler führen, den ich nicht beseitigen konnte. Beachten Sie, dass dies auch dann angezeigt wird , wenn ich zu meinem Domänenstamm gehe , ohne ein bestimmtes Verzeichnis anzugeben.
Ich verwende einen Amazon EC2-Webserver mit aktiviertem Port 9000, geöffnetem Port 80 usw.
Die Frage ist insbesondere, wie ich diesen bösen Fehler loswerden kann. Oder, noch besser, wie kann ich php5-fpm
zu tatsächlich funktionieren .
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 viel geholfen hat:
;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;
;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35
Danach habe ich versucht, meine Konfigurationsdateien einzuschließen:
include=/etc/php5/fpm/*.conf
Was mich nur noch weiter verarscht 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 ist diese Konfiguration ein kleiner Teil einiger Websites, die ich besucht habe, aber ich kann Ihnen sagen, dass der Server vor diesem 502 Bad Gateway-Geschäft einwandfrei lief (ohne dass PHP funktionierte. Zeitraum).
Das Problem liegt hauptsächlich in der Tatsache, dass etwas schrecklich, schrecklich falsch ist. Und jetzt, wenn ich versuche , eine zu tun service php5-fpm restart
, hängt es in dem, was ich vermute , eine Endlosschleife oder etwas ist, was ich kann nicht einmal CTRL- Caus.
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;
}
}
quelle
# 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; }
?127.0.0.1:9000
Versuchen Sie, diese Werte einzustellen, es löst das Problem in Fast-CGI
fastcgi_buffer_size 16k; fastcgi_buffers 4 16k;
quelle
Ich habe all diese ähnlichen Änderungen vorgenommen, aber von Zeit zu Zeit bekam ich 501/502 Fehler (täglich).
Dies sind meine Einstellungen unter /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 gilt für einen 8-Gbit-RAM-Server.
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 starten Sie php-fpm neu
quelle
Wenn Sie das Problem nach dem Upgrade von php-fpm wie mir festgestellt haben, versuchen Sie Folgendes: Öffnen Sie /etc/php5/fpm/pool.d/www.conf und kommentieren Sie die folgenden Zeilen aus:
listen.owner = www-data listen.group = www-data listen.mode = 0666
Starten Sie dann php-fpm neu.
quelle
/etc/php/php-fpm.d/www/conf
unter Arch Linux. Beachten Sie, dass das Festlegen von Berechtigungen auf0666
wahrscheinlich nicht für die Produktion geeignet ist. Stattdessen sollte ein Produktionsserver mit dem Nginx-Benutzer und dem PHP-FPM-Benutzer übereinstimmen und die Berechtigungen0660
zur Erhöhung der Sicherheit behalten .Vergiss nicht, dass
php-fpm
das ein Service ist. Stellen Sie nach der Installation sicher, dass Sie es starten:# service php-fpm start # chkconfig php-fpm on
quelle
Für alle anderen, die Schwierigkeiten haben, dem auf den Grund zu gehen, habe ich versucht, die Zeitüberschreitungen wie vorgeschlagen anzupassen, da ich die Verwendung von Unix-Sockets nicht beenden wollte. Nach vielen Fehlerbehebungen und nicht viel zu tun stellte ich fest, dass dieses Problem verursacht wurde durch die APC-Erweiterung, die ich vor ein paar Monaten in php-fpm aktiviert hatte. Durch Deaktivieren dieser Erweiterung wurden die zeitweise auftretenden 502-Fehler behoben. Der einfachste Weg, dies zu tun, bestand darin, die folgende Zeile auskommentieren:
Das hat den Trick für mich getan!
quelle
Der Port wurde in 5.4 auf 9001 geändert, nur das Ändern des Ports von 9000 auf 9001 in der Nginx Conf und in der PHP-Fpm-Konfiguration funktionierte für mich.
quelle
Hoffe, dieser Tipp wird jemand anderem das Leben retten. In meinem Fall war das Problem, dass mir der Speicher ausgegangen war, aber nur geringfügig, und es war schwer, darüber nachzudenken. Verschwendete 3 Stunden darauf. Ich empfehle zu laufen:
oder
... zusammen mit problematischen Anforderungen auf dem Server, um festzustellen, ob Ihr Speicher nicht knapp wird. Und wenn es in meinem Fall gefällt, müssen Sie eine Auslagerungsdatei erstellen (es sei denn, Sie haben bereits eine).
Ich habe dieses Tutorial befolgt, um eine Auslagerungsdatei unter Ubuntu Server 14.04 zu erstellen, und es hat einwandfrei funktioniert: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/
quelle
Ich habe auch festgestellt, dass dieser Fehler beim Schreiben von json_encoded () -Daten in MySQL verursacht werden kann. Um das zu umgehen, habe ich den JSON base64_encode (). Bitte beachten Sie, dass die JSON-Codierung beim Dekodieren Werte ändern kann. Nb. 24 kann 24.00 werden
quelle
Nachdem ich jede Lösung im Web ausprobiert hatte, fand ich das Problem mit einer sehr einfachen Methode heraus. Zuerst habe ich das PHP-Fpm-Fehlerprotokoll überprüft
cat /var/log/php5-fpm.log
und der am häufigsten wiederholte Fehler war
" WARNING: [pool www] server reached pm.max_children setting (5), consider raising it "
Ich bearbeite die Einstellung für PHP-fpm-Pools
Ich habe diese Zeile geändert
pm.max_children = 5
Zu neuem Wert
pm.max_children = 10
Übrigens verwende ich Low-End-VPS mit 128 MB RAM. Wie alle anderen, von denen ich dachte, dass die Wiederverwendung dazu
pm.max_children
führt, dass mein Server schneller läuft, verbraucht er weniger Speicher, aber die von uns verwendeten Einstellungen waren zu niedrig, um den PHP-fpm-Prozess überhaupt zu starten. Ich hoffe, dies hilft anderen, da ich dies nach 24-stündigem Testen und Fehlschlagen festgestellt habe. Mein Webhost-Support konnte das Problem jedoch nie lösen.quelle
Sie sollten das Fehlerprotokoll sehen. Standardmäßig befindet sich der Speicherort in /var/log/nginx/error.log
In meinem Fall kommen 502 weg wegen:
GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local" 2016/05/25 11:57:28 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local" 2016/05/25 11:57:29 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local" 2016/05/25 11:57:29 [error] 22889#22889: *3 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: symfony2.local, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "symfony2.local"
Wenn wir genau wissen, was falsch ist, beheben Sie es. Ändern Sie für diesen Fehler einfach den Puffer:
fastcgi_buffers 16 512k; fastcgi_buffer_size 512k;
quelle
Ich bin sehr spät zu diesem Spiel, aber mein Problem begann, als ich PHP auf meinem Server aktualisiert habe. Ich konnte einfach die .socket-Datei entfernen und meine Dienste neu starten. Dann hat alles funktioniert. Ich bin mir nicht sicher, warum es einen Unterschied gemacht hat, da die Datei die Größe 0 hat und der Besitz und die Berechtigungen gleich sind, aber es hat funktioniert.
quelle
Versuchen Sie zunächst, ChromePHP zu deaktivieren, bevor Sie mit der Nginx-Konfiguration herumspielen.
1 - Öffnen Sie app / config / config_dev.yml
2 - Kommentieren Sie diese Zeilen:
ChromePHP packt die json-codierten Debug-Informationen in den X-ChromePhp-Data-Header, der für die Standardkonfiguration von nginx mit fastcgi zu groß ist.
quelle
Stellen Sie in Ihrer NGINX vhost-Datei im Speicherortblock, der Ihre PHP-Dateien (normalerweise
location ~ \.php$ {
) über FastCGI verarbeitet, sicher, dass Sie die nächsten Zeilen haben:proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k;
Vergessen Sie danach nicht, fpm und nginx neu zu starten.
Zusätzlich:
NGINX vhost Pfade
/etc/nginx/sites-enabled/
- LinuxStarten Sie NGINX neu:
sudo service nginx restart
- Linuxbrew service restart nginx
- MacStarten Sie FPM neu:
Bestimmen Sie den Namen des fpm-Prozesses: -
systemctl list-unit-files | grep fpm
- Linux -brew services list | grep php
- Macund starten Sie es dann neu mit:
sudo service <service-name> restart
- Linuxbrew services restart <service-name>
- Macquelle
Vielleicht hilft diese Antwort:
Nginx-Fehler Verbindung zu php5-fpm.sock hergestellt fehlgeschlagen (13: Berechtigung verweigert)
Die Lösung bestand darin, www-data in /var/www/php/fpm/pool.d/www.conf durch nginx zu ersetzen
Ändern Sie jeweils die Socket-Anmeldeinformationen:
$ sudo chmod nginx:nginx /var/run/php/php7.2-fpm.sock
quelle