Pertanyaan PHP-FPM dan Nginx: 502 Bad Gateway


Konfigurasi

  • Ubuntu Server 11.10 64 bit
  • Amazon AWS, Ec2, dihosting di cloud
  • contoh t1.micro

Sebelum saya menulis hal lain, saya ingin menyatakan bahwa saya telah memeriksa keduanya nginx 502 gateway buruk dan Nginx + PHP-FPM 502 Bad Gateway benang, yang sayangnya tidak membantu saya dalam hal ini.

Masalahnya tampaknya agak umum: kesalahan konfigurasi nginx atau php-fpm dapat menyebabkan a 502 Bad Gateway kesalahan, yang merupakan sesuatu yang belum bisa saya singkirkan. Perhatikan bahwa ini muncul bahkan ketika saya pergi ke root domain saya, tanpa menentukan direktori tertentu.

Saya menjalankan server web Amazon EC2, dengan port 9000 diaktifkan, port 80 terbuka, dll.

Pertanyaannya khususnya adalah, bagaimana saya bisa menyingkirkan kesalahan jahat ini? Atau, lebih baik lagi, bagaimana saya bisa mendapatkannya php5-fpm untuk sebenarnya bekerja.

Apa yang saya coba sejauh ini

Sebagian besar mengedit file konfigurasi secara konsisten, terutama php-fpm.conf dan nginx.conf.

saya.  php-fpm.conf

Saya telah menambahkan yang berikut, yang belum cukup membantu:

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

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

Sekarang, setelah itu saya mencoba memasukkan file konfigurasi saya:

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

Yang hanya mengacaukan saya lebih jauh.

Konfigurasi Penuh

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

Sejujurnya konfigurasi ini adalah segelintir dari beberapa situs web yang saya kunjungi, tetapi saya dapat memberitahu Anda bahwa sebelum bisnis 502 Bad Gateway ini, server berjalan baik (tanpa PHP bekerja. Periode.).

Masalahnya terutama terletak pada fakta bahwa ada sesuatu yang sangat salah. Dan sekarang, ketika saya mencoba melakukan service php5-fpm restart, tergantung pada apa yang saya tebak adalah loop tak terbatas atau sesuatu, yang bahkan tidak bisa saya lakukan CTRL-C dari.

Konfigurasi Penuh

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


asal


Jawaban:


Jika ada yang menemukan halaman ini dengan menemui masalah yang sama dengan saya, saya menemukan jawabannya di sini: http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ubuntu-12.04-lts

Bagi Anda yang tidak dapat diganggu untuk mengklik dan mengerjakannya sendiri ...;)

Kondisi:

Ubuntu atau Debian server dengan NGINX dan PHP 5.3 berfungsi dengan baik tetapi upgrade PHP ke 5.4 memberikan 502 kesalahan Gateway Buruk. Mencari layanan yang berjalan di port 9000 (biasanya berjalan netstat -lp atau serupa) tidak menghasilkan apa-apa.

Cara memperbaiki:

Buka /etc/php5/fpm/pool.d/www.conf dan catat parameter 'listen' (dalam kasus saya /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

dan ganti variabel fastcgi_pass di vhost Anda dengan lokasi yang baru saja Anda catat.

Jadi konfigurasi symfony2 contoh ini (diambil dari sini: 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;
  }

menjadi ini:

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

Kemudian restart nginx:

sudo /etc/init.d/nginx restart

catatan: menggantikan ~ ^/(app|app_dev)\.php(/|$) { dengan ~ ^/index\.php(/|$) { jika Anda tidak di SF2 **

Semoga ini bisa menyelamatkan seseorang sedikit waktu :)

Edit

Tentu saja, Anda bisa mengubah listen = /var/run/php5-fpm.sock untuk listen = 127.0.0.1:9000 di /etc/php5/fpm/pool.d/www.conf kemudian restart php5-fpm (yang akan menyelamatkan Anda dari harus mengubah vhosts Anda), tetapi Anda harus menganggap mereka mengubah php5-fpm untuk menjalankan melalui soket daripada mendengarkan pada port 9000 karena suatu alasan.

Edit2

Jika Anda masih mengalami kesalahan 502, lihat jawaban ini: kesalahan nginx terhubung ke php5-fpm.sock gagal (13: Izin ditolak)


151
2018-01-28 10:40



Coba atur nilai-nilai ini, ini memecahkan masalah dalam fast-cgi

fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;

28
2018-05-22 06:51



Saya membuat semua tweak yang sama ini, tetapi dari waktu ke waktu saya mendapatkan 501/502 kesalahan (setiap hari).

Ini adalah pengaturan saya /etc/php5/fpm/pool.d/www.conf untuk menghindari 501 dan 502 kesalahan nginx ... Server memiliki RAM 16 GB. Konfigurasi ini untuk server RAM 8Gb jadi ...

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

lalu tetapkan nilai berikut untuk

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

Setelah ini, mulai ulang php-fpm

sudo service php-fpm restart

10
2017-12-22 00:58



Jika Anda menemui masalah setelah memutakhirkan php-fpm seperti saya, coba ini: buka /etc/php5/fpm/pool.d/www.conf batalkan komentar pada baris berikut:

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

kemudian restart php-fpm.


4
2018-01-30 05:25



Jangan lupakan itu php-fpm adalah layanan. Setelah menginstalnya, pastikan Anda memulainya:

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

3
2018-06-11 06:45



Untuk orang lain berjuang untuk mendapatkan ke bagian bawah ini, saya mencoba menyesuaikan timeout seperti yang disarankan karena saya tidak ingin berhenti menggunakan soket Unix ... setelah banyak mengatasi masalah dan tidak banyak yang bisa saya temukan bahwa masalah ini disebabkan oleh ekstensi APC yang saya aktifkan di php-fpm beberapa bulan lalu. Menonaktifkan ekstensi ini menyelesaikan kesalahan 502 intermiten, cara termudah untuk melakukannya adalah dengan memberi komentar pada baris berikut:

;extension = apc.so

Ini berhasil untuk saya!


2
2018-06-23 18:40



Port diubah menjadi 9001 di 5.4, hanya mengubah port dari 9000 menjadi 9001 di conf nginx dan dalam konfigurasi php-fpm bekerja untuk saya.


1
2017-08-04 07:07



Semoga tip ini akan menyelamatkan hidup orang lain. Dalam kasus saya, masalahnya adalah saya kehabisan memori, tetapi hanya sedikit, sulit untuk memikirkannya. Terbuang 3 jam untuk itu. Saya menyarankan untuk menjalankan:

sudo htop

atau

sudo free -m

... bersama dengan menjalankan permintaan bermasalah di server untuk melihat apakah memori Anda tidak habis. Dan jika memang seperti dalam kasus saya, Anda perlu membuat file swap (kecuali Anda sudah memilikinya).

Saya telah mengikuti tutorial ini untuk membuat file swap pada Ubuntu Server 14.04 dan itu bekerja dengan baik: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/


1
2018-02-12 15:37