Como evitar que o servidor inteiro sofra o tempo limite de um website?

2

Desde que comecei a hospedar um site no servidor, recebo tempos limite de 505, 504, e outros sites hospedados no mesmo servidor (mas esses outros sites não têm problemas).

O sistema operacional do servidor é Ubuntu16.04 e possui nginx de php7.0-fpm, aparentemente configurado incorretamente.

Como evitar que todos os outros sites sofram os tempos limite do site recém-hospedado? Ou como evitar esses tempos limite (sem corrigir os erros do php, já que não tenho nada a ver com isso)?

O código php tem muitos erros. Os registros php7.0-fpm revelam um tempo limite.

/var/log/php7.0-fpm.log

[26-Mar-2018 20:29:54] WARNING: [pool www] child 17012, script '/var/www/xxxxxx.com/index.php' (request: "POST /index.php?function=my-profile") execution timed out (306.572078 sec), terminating [26-Mar-2018 20:29:54] WARNING: [pool www] child 17012 exited on signal 15 (SIGTERM) after 1100.011016 seconds from start [26-Mar-2018 20:29:54] NOTICE: [pool www] child 19559 started

/var/log/nginx/error.log

O Nginx revela muitos avisos do php que eu não sei ao certo para onde olhar.

/etc/nginx/nginx.conf

http {
    # ...
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    # ...
}

/etc/php/7.0/fpm/pool.d

pm = dynamic
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.process_idle_timeout = 10s
pm.max_requests = 500

/etc/php/7.0/fpm

default_socket_timeout = 60
max_execution_time = 300
max_input_time = 60
memory_limit = 128M

O bloco do servidor inclui esta parte /etc/nginx/global/wordpress.conf

# Deny access to any files with a .php extension in the uploads directory
# Works in sub-directory installs and also in multisite network
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

# Directives to send expires headers and turn off 404 error logging for Static assets
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpe?g|gif|png|ico|zip|pdf|t?gz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|swf|bmp|txt|rtf|md)$ {
    access_log off;
    log_not_found off;
    expires max;

    # CORS headers; this is wide-open, you want to tight it up a bit
    add_header Cache-Control public;
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods GET,OPTIONS;
    add_header Access-Control-Allow-Headers *;
}

# Attempted to match last if rules below fail.
location / {
    try_files $uri $uri/ /index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Pass PHP scripts to PHP-FPM daemon
# Check: http://wiki.nginx.org/Pitfalls
location ~* \.php$ {
    # filter out problem conditions
    try_files $uri $uri/ =404;

    # bring in parameters
    include fastcgi.conf;

    # send requests to upstream
    # fastcgi_pass phpfpm;
    # fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_read_timeout 300;

}
    
por ccl18 27.03.2018 / 11:12

1 resposta

2

Apesar de sua vontade, você criou a mesma situação quando alguém está sob um ataque PHP-POOL. Isso significa exatamente o que está acontecendo com você, o PHP fica preso a um site, e o resto não pode funcionar por causa disso. O que eu recomendo strongmente é o seguinte:

Crie um novo pool PHP para cada um dos sites. Você pode conseguir isso criando novos arquivos de configuração. No CentOS 7, eu os tenho em /etc/php-fpm.d/mywebsite.conf. Encontre o seu arquivo de configuração atual do pool e simplesmente crie uma cópia para ele na mesma pasta. Então você tem que mudar os seguintes:

  • [mywebsite]
  • usuário = nginx
  • group = nginx
  • listen = /run/php/mywebsite.sock
  • listen.owner = nginx
  • listen.group = nginx
  • listen.mode = 0660

Alguns só precisam ser desfeitos, alguns precisam ser editados. Depois de ter feito isso, faça o mesmo para cada um dos sites. Em seguida, na configuração nginx dos sites, substitua o fastcgi_pass unix:/run/php/php7.0-fpm.sock; pelos locais de arquivo apropriados dos arquivos de meia. Reinicie o NginX e o PHP-FPM e você deve estar pronto para usar.

Também ... 128MB para um PHP? Isso é magro como um pedaço de cabelo. Aumente para 1024M, no mínimo, ou 2048, se puder. Depende do seu HW OFC.

    
por 27.03.2018 / 13:23

Tags