04 kwi 2012, 03:50 z zeboidlund

PHP-FPM i Nginx: 502 Bad Gateway

Konfiguracja

Ubuntu Server 11.10 64 bitAmazon AWS, Ec2, hostowany w chmurzeinstancja t1.micro

Zanim napiszę cokolwiek innego, chciałbym stwierdzić, że sprawdziłem obanginx 502 zła brama iNginx + PHP-FPM 502 Bad Gateway wątki, które niestety nie pomogły mi w tym względzie.

Problem wydaje się być dość powszechny: błędna konfiguracja nginx lub php-fpm może prowadzić do502 Bad Gateway błąd, którego nie mogłem się pozbyć. Zauważ, że to się pojawinawet gdy idę do mojego katalogu głównego domeny, bez określania konkretnego katalogu.

Używam serwera internetowego Amazon EC2 z włączonym portem 9000, otwartym portem 80 itd.

W szczególności pytanie brzmi: jak mogę pozbyć się tego paskudnego błędu? Albo jeszcze lepiej, jak mogę to uzyskaćphp5-fpm dofaktycznie działa.

Co do tej pory próbowałem

Głównie spójna edycja plików konfiguracyjnychphp-fpm.conf inginx.conf.

ja. php-fpm.conf

Dodałem następujące, co nie bardzo pomogło:

<code>;;;;;;;;;;;;;
; Fpm Start ;
;;;;;;;;;;;;;

;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35
</code>

Teraz spróbowałem dołączyć moje pliki konfiguracyjne:

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

Co mnie jeszcze bardziej spieprzyło.

Pełna konfiguracja

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

ii. nginx.conf

Szczerze mówiąc, ta konfiguracja jest odrobiną kilku stron, które odwiedziłem, ale mogę powiedzieć, że przed tą działalnością 502 Bad Gateway serwer działał bez zarzutu (bez PHP. Okres.).

Problem polega przede wszystkim na tym, że coś jest okropnie, strasznie źle. A teraz, kiedy próbuję zrobićservice php5-fpm restart, wisi w tym, co zgaduję, jest nieskończoną pętlą lub czymś, czego nawet nie mogęCTRL-C poza.

Pełna konfiguracja

<code>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 Ubuntu Server 11.10 64 bit2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 Ubuntu Server 11.10 64 bit2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 Ubuntu Server 11.10 64 bit2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 Ubuntu Server 11.10 64 bit2; }
            if ($document_root2 ~ "^(.*\\\\).*?[\\\\|\/]\.\.\/(.*)$") { set $document_root2 Ubuntu Server 11.10 64 bit2; }
            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;
    }
}
</code>

questionAnswers (0)

28 sty 2013, 10:40 z 2,521

Jeśli ktokolwiek znajdzie tę stronę, napotykając ten sam problem, co ja, znalazłem odpowiedźtutaj.

Dla tych z Was, którzy nie mogą się przejmować kliknięciem i wypracowaniem dla siebie ...;)

Warunek:

Serwer Ubuntu lub Debian z NGINX i PHP 5.3 działa dobrze, ale aktualizacja PHP do 5.4 daje 502 błędy Bad Gateway. Szukam usług działających na porcie 9000 (zazwyczaj działanetstat -lp lub podobne) nic nie zwraca.

Poprawka:

otwarty/etc/php5/fpm/pool.d/www.conf i zanotuj parametr „listen” (w moim przypadku/var/run/php5-fpm.sock):

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

i zastąp zmienną fastcgi_pass w swoim vhostie lokalizacją, którą właśnie zauważyłeś.

Więc ta przykładowa konfiguracja symfony2 (zaczerpnięta ztutaj):

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

staje się to:

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

Następnie uruchom ponownie nginx:

<code>sudo /etc/init.d/nginx restart
</code>

Uwaga: zastąpić~ ^/(app|app_dev)\.php(/|$) { z~ ^/index\.php(/|$) { jeśli nie jesteś na SF2 **

Mam nadzieję, że zaoszczędzi to trochę czasu :)

Edytować

Oczywiście możesz zmienićlisten = /var/run/php5-fpm.sock dolisten = 127.0.0.1:9000 w/etc/php5/fpm/pool.d/www.conf następnie ponownie uruchom php5-fpm (co pozwoli ci uniknąć konieczności zmiany vhostów), ale musisz założyć, że zmienili php5-fpm, aby uruchomić przez gniazdo, a nie słuchać na porcie 9000 z jakiegoś powodu.

Edit2

Jeśli nadal występuje błąd 502, zobacz toodpowiedź.

11 cze 2014, 06:45 z Jake Wilson

Nie zapominaj o tymphp-fpm to usługa. Po zainstalowaniu upewnij się, że go uruchomiłeś:

<code># service php-fpm start
# chkconfig php-fpm on
</code>
22 maj 2012, 06:51 z 389

rozwiązuje problem w fast-cgi

<code>fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
</code>
28 maj 2017, 15:44 z humanity

ale mój problem zaczął się, gdy zaktualizowałem php na moim serwerze. Udało mi się po prostu usunąć plik .socket i ponownie uruchomić usługi. Wtedy wszystko działało. Nie wiem, dlaczego to miało znaczenie, ponieważ plik ma rozmiar 0, a prawa własności i uprawnienia są takie same, ale działało.

30 sty 2015, 05:25 z yang

Jeśli napotkałeś problem po aktualizacji php-fpm jak ja, spróbuj tego: otwórz /etc/php5/fpm/pool.d/www.conf odkomentuj następujące wiersze:

<code>listen.owner = www-data
listen.group = www-data
listen.mode = 0666
</code>

następnie uruchom ponownie php-fpm.

25 maj 2016, 05:04 z De Nguyen

je się w /var/log/nginx/error.log

W moim przypadku 502 trafiło z powodu:

<code>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"
</code>

Kiedy dokładnie wiemy, co jest nie tak, napraw to. Dla tych błędów zmodyfikuj bufor:

<code>fastcgi_buffers 16 512k; 
fastcgi_buffer_size 512k;
</code>
04 sie 2013, 07:07 z Aaron Judd

Port został zmieniony na 9001 w 5.4, po prostu zmiana portu z 9000 na 9001 w conf nginx iw konfiguracji php-fpm działała dla mnie.

23 cze 2015, 18:40 z 21

kto stara się dotrzeć do sedna tego problemu, próbowałem dopasować limity czasu zgodnie z sugestią, ponieważ nie chciałem przestać używać gniazd Unixowych ... po wielu rozwiązaniach i nie mam zbyt wiele do zrobienia, stwierdziłem, że ten problem był spowodowany przez rozszerzenie APC, które włączyłem w php-fpm kilka miesięcy temu. Wyłączenie tego rozszerzenia rozwiązało sporadyczne błędy 502, najłatwiej to zrobić, komentując następującą linię:

<code>;extension = apc.so
</code>

Zrobiło to dla mnie sztuczkę!

22 gru 2015, 00:58 z PJunior

ale od czasu do czasu dostawałem 501/502 błędów (codziennie).

To są moje ustawienia włączone/etc/php5/fpm/pool.d/www.conf aby uniknąć błędów 501 i 502 nginx… Serwer ma 16 GB pamięci RAM. Ta konfiguracja dotyczy serwera RAM 8 Gb, więc…

<code>sudo nano /etc/php5/fpm/pool.d/www.conf
</code>

następnie ustaw następujące wartości dla

<code>pm.max_children = 70
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
</code>

Po tych zmianach ponownie uruchom php-fpm

<code>sudo service php-fpm restart
</code>
12 lut 2015, 15:37 z Rav

Mam nadzieję, że ta wskazówka uratuje komuś życie. W moim przypadku problem polegał na tym, że zabrakło mi pamięci, ale tylko trochę trudno było o tym myśleć. Zmarnowałem 3 godziny. Polecam bieganie:

<code>sudo htop
</code>

lub

<code>sudo free -m
</code>

... wraz z uruchomionymi problematycznymi żądaniami na serwerze, aby sprawdzić, czy Twoja pamięć się nie skończyła. A jeśli tak jest w moim przypadku, musisz utworzyć plik wymiany (chyba że już go masz).

Śledziłem ten samouczek, aby utworzyć plik wymiany na Ubuntu Server 14.04 i działał on dobrze:http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

29 kwi 2016, 15:39 z Salem

Po wypróbowaniu każdego rozwiązania w sieci skończyło się na tym, że problem został rozwiązany za pomocą bardzo prostej metody, najpierw sprawdziłem log php-fpm err

<code>cat /var/log/php5-fpm.log 
</code>

a najczęściej powtarzającym się błędem

<code>" WARNING: [pool www] server reached pm.max_children setting (5), consider raising it "
</code>

Edytuję ustawienia pul PHP-fpm

<code>nano /etc/php5/fpm/pool.d/www.conf
</code>

Rozgryzłem tę linię

<code>pm.max_children = 5
</code>

Do nowej wartości

<code>pm.max_children = 10
</code>

BTW Używam niskiego poziomu VPS z 128MB pamięci RAM Jak wszyscy inni sądziłem, że to przerabiapm.max_children sprawi, że mój serwer będzie działał szybciej, zużywając mniej pamięci, ale ustawienie, którego używaliśmy, było zbyt niskie, aby nawet uruchomić proces PHP-fpm. Mam nadzieję, że pomoże to innym, ponieważ znalazłem to po 24-godzinnym testowaniu i niepowodzeniu, nigdy nie udało mi się rozwiązać tego problemu.

23 maj 2018, 17:32 z М.Б.

W twoim pliku vhost NGINX, w bloku lokalizacji, który przetwarza twoje pliki PHP (zazwyczajlocation ~ \.php$ {) przez FastCGI, upewnij się, że masz następne wiersze:

<code>proxy_buffer_size          128k;
proxy_buffers              4 256k;
proxy_busy_buffers_size    256k;
fastcgi_buffer_size        16k;
fastcgi_buffers            4 16k;
</code>

Po tym nie zapomnij zrestartować fpm i nginx.

Dodatkowy:

Ścieżki vhosta NGINX

/etc/nginx/sites-enabled/ - Linux'/ usr / local / etc / nginx / sites-enabled /' - Mac

Uruchom ponownie NGINX:

sudo service nginx restart - Linuxbrew service restart nginx - Mac

Uruchom ponownie FPM:

Określ nazwę procesu fpm: -systemctl list-unit-files | grep fpm - Linux -brew services list | grep php - Mac

a następnie uruchom go ponownie:

sudo service <service-name> restart - Linuxbrew services restart <service-name> - Mac
09 lis 2015, 22:53 z Lionel Morrison

że ten błąd może być spowodowany zapisaniem danych json_encoded () w MySQL. Aby ominąć to I base64_encode () JSON. Proszę nie, że po zdekodowaniu kodowanie JSON może zmienić wartości. Nb. 24 może stać się 24.00

17 sie 2017, 14:33 z Lucas Bustamante

Zanim zaczniesz bawić się konfiguracją Nginx, spróbuj najpierw wyłączyć ChromePHP.

1 - Otwórz app / config / config_dev.yml2 - Skomentuj te linie:
<code>chromephp:
    type:   chromephp
    level:  info
</code>

ChromePHP pakuje informacje o debugowaniu zakodowane w nagłówku X-ChromePhp-Data, który jest zbyt duży dla domyślnej konfiguracji nginx z fastcgi.

yourAnswerToTheQuestion