Вопрос по amazon-ec2, nginx, php – PHP-FPM и Nginx: 502 Bad Gateway

75

Configuration

Ubuntu Server 11.10 64 bit Amazon AWS, Ec2, hosted on the cloud t1.micro instance

Прежде чем написать что-либо еще, я хотел бы заявить, что я проверил обаnginx 502 плохой шлюз а такжеNginx + PHP-FPM 502 Bad Gateway темы, которые, к сожалению, не помогли мне в этом отношении.

Проблема, кажется, довольно распространенная: неправильная настройка nginx или php-fpm может привести к502 Bad Gateway ошибка, от которой я не смог избавиться. Обратите внимание, что это появляетсяeven when I go to my domain rootбез указания какого-либо конкретного каталога.

Я использую веб-сервер Amazon EC2 с включенным портом 9000, открытым портом 80 и т. Д.

В частности, вопрос в том, как я могу избавиться от этой неприятной ошибки? Или, еще лучше, как я могу получитьphp5-fpm вactually work.

What I Have Attempted so Far

В основном последовательное редактирование файлов конфигурации, в частностиphp-fpm.conf а такжеnginx.conf.

i. php-fpm.conf

Я добавил следующее, что не очень помогло:

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

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

Теперь, после этого я попытался включить мои файлы конфигурации:

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

Который только облажался мне еще дальше.

Full Configuration

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

Честно говоря, эта конфигурация представляет собой совокупность нескольких веб-сайтов, которые я посетил, но я могу вам сказать, что до этого бизнеса 502 Bad Gateway сервер работал нормально (без работы PHP. Период.).

Проблема в первую очередь заключается в том, что что-то ужасно, ужасно неправильно. И теперь, когда я пытаюсь сделатьservice php5-fpm restartон зависает в том, что, как я догадываюсь, представляет собой бесконечный цикл или что-то, что я даже не могуCTRL-C снаружи.

Full Configuration

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

Ваш Ответ

14   ответов
0

попробовав каждое решение в Интернете, я решил проблему очень простым способом, сначала проверил php-fpm err log

cat /var/log/php5-fpm.log 

и самая повторная ошибка была

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

Я редактирую настройки пулов PHP-fpm

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

Я изменил эту линию

pm.max_children = 5

Для нового значения

pm.max_children = 10

Кстати, я использую низкочастотный VPS с оперативной памятью 128 МБ. Как и все остальные, я думал, что переделываюpm.max_children заставит мой сервер работать быстрее, потребляя меньше памяти, но настройки, которые мы использовали, были слишком низкими, чтобы даже запустить процесс PHP-fpm. Я надеюсь, что это поможет другим, так как я обнаружил, что после 24-часового тестирования и сбоев, моя служба поддержки не смогла решить эту проблему.

0

в блоке местоположения, который обрабатывает ваши PHP-файлы (обычноlocation ~ \.php$ {) через FastCGI убедитесь, что у вас есть следующие строки:

proxy_buffer_size          128k;
proxy_buffers              4 256k;
proxy_busy_buffers_size    256k;
fastcgi_buffer_size        16k;
fastcgi_buffers            4 16k;

После этого не забудьте перезапустить fpm и nginx.

Additional:

NGINX vhost paths

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

Restart NGINX:

sudo service nginx restart - Linux brew service restart nginx - Mac

Restart FPM:

Determine fpm process name: - systemctl list-unit-files | grep fpm - Linux - brew services list | grep php - Mac

и затем перезапустите его:

sudo service <service-name> restart - Linux brew services restart <service-name> - Mac
4

как я, попробуйте это: Откройте /etc/php5/fpm/pool.d/www.conf раскомментируйте следующие строки:

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

затем перезапустите php-fpm.

Error: User Rate Limit Exceeded/etc/php/php-fpm.d/www/confError: User Rate Limit Exceeded0666Error: User Rate Limit Exceeded0660Error: User Rate Limit Exceeded
0

попробуйте сначала отключить ChromePHP.

1 - Open app/config/config_dev.yml 2 - Comment these lines:
chromephp:
    type:   chromephp
    level:  info

ChromePHP упаковывает отладочную информацию, закодированную json в заголовок X-ChromePhp-Data, которая слишком велика для конфигурации по умолчанию nginx с fastcgi.

28

fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
10

но время от времени я получал ошибки 501/502 (ежедневно).

Это мои настройки на/etc/php5/fpm/pool.d/www.conf чтобы избежать ошибок 501 и 502 nginx & # x2026; Сервер имеет 16 Гб оперативной памяти. Эта конфигурация предназначена для сервера ОЗУ 8 ГБ, поэтому & # x2026;

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

затем установите следующие значения для

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

После этого перезапустите php-fpm

sudo service php-fpm restart
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

Не забывайте, чтоphp-fpm это услуга. После его установки обязательно запустите:

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

этот совет спасет чужую жизнь. В моем случае проблема заключалась в том, что у меня не хватило памяти, но мне было трудно об этом думать. На это потрачено 3 часа. Я рекомендую запустить:

sudo htop

или же

sudo free -m

... наряду с выполнением проблемных запросов на сервере, чтобы проверить, не исчерпана ли ваша память. И если это так, как в моем случае, вам нужно создать файл подкачки (если у вас его еще нет).

Я следовал этому руководству, чтобы создать файл подкачки на Ubuntu Server 14.04, и он работал просто отлично: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

0

но моя проблема началась, когда я обновил php на своем сервере. Мне удалось просто удалить файл .socket и перезапустить мои службы. Тогда все заработало. Не уверен, почему это имело значение, так как размер файла равен 0, а права доступа и права совпадают, но это сработало.

0

что эта ошибка может быть вызвана записью данных json_encoded () в MySQL. Чтобы обойти это, я base64_encode () JSON. Обратите внимание, что при декодировании кодировка JSON может изменять значения. В северном направлении 24 может стать 24.00

0

По умолчанию его местоположение находится в /var/log/nginx/error.log

В моем случае 502 получают путь из-за:

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"

Когда мы точно знаем, что не так, тогда исправим это. Для этих ошибок просто измените буфер:

fastcgi_buffers 16 512k; 
fastcgi_buffer_size 512k;
2

кто пытается разобраться в этом, я попытался настроить тайм-ауты в соответствии с предложением, так как я не хотел прекращать использовать сокеты Unix ... после большого количества устранения неполадок и не слишком много времени, я обнаружил, что эта проблема была вызвана расширением APC, которое я включил в php-fpm несколько месяцев назад. Отключение этого расширения позволило устранить периодически возникающие ошибки 502, самый простой способ сделать это - закомментировать следующую строку:

;extension = apc.so

Это помогло мне!

152

столкнувшись с той же проблемой, что и я, я нашел ответВот.

Для тех из вас, кто не может позаботиться о том, чтобы нажать и решить это для себя ...;)

The Condition:

Сервер Ubuntu или Debian с NGINX и PHP 5.3 работает нормально, но обновление PHP до 5.4 дает 502 ошибки Bad Gateway. Ищу сервисы, работающие на порту 9000 (обычно работающиеnetstat -lp или аналогичный) ничего не возвращает.

The fix:

открыто/etc/php5/fpm/pool.d/www.conf и запишите «прослушать»; параметр (в моем случае/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

и замените переменную fastcgi_pass в вашем vhost на местоположение, которое вы только что отметили.

Итак, этот пример конфигурации Symfony2 (взят изВот):

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

становится так:

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

Затем перезапустите nginx:

sudo /etc/init.d/nginx restart

Note: замещать~ ^/(app|app_dev)\.php(/|$) { с~ ^/index\.php(/|$) { если вы не на SF2 **

Надеюсь, это сэкономит кому-то немного времени :)

Edit

Конечно, вы можете изменитьlisten = /var/run/php5-fpm.sock вlisten = 127.0.0.1:9000 в/etc/php5/fpm/pool.d/www.conf затем перезапустите php5-fpm (что избавит вас от необходимости изменять ваши vhosts), но вы должны предположить, что они изменили php5-fpm для запуска через сокет, а не для прослушивания порта 9000 по причине.

Edit2

Если вы все еще испытываете ошибку 502, посмотрите этоответ.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded# 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; }?
Error: User Rate Limit Exceededdrupal.org/node/1635622#comment-6814968
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded127.0.0.1:9000
1

просто меняя порт с 9000 на 9001 в конфигурации nginx и в конфигурации php-fpm у меня работало.

Похожие вопросы