我已经阅读了有关此错误的所有其他线程,但没有运气。
我在 RHEL 6 上运行 Nginx 1.12.2 和 PHP-FPM 5.6
我在我网站的任何/所有页面上都收到这些错误。它与缓慢的请求无关。我亲眼目睹了这一点,我立即得到了 500 错误页面,无需任何等待。
它会影响 POST 和 GET 请求。
我没有运行任何操作码缓存(据我所知),我检查了所有配置文件、phpinfo() 以及 php -v,但没有看到任何提及操作缓存或操作码的信息。)
我已经在 PHP-FPM 中打开了 catch_workers_output 。我没有收到任何 PHP 错误
我有足够的可用内存,并且系统日志中没有关于内存、文件描述符或套接字的错误。
尝试了 pm_max_requests 的高值和低值
未运行 xdebug 插件
似乎是随机发生的,即使是在我们根本不忙的半夜。
我迫切希望解决这个已经持续了几个月的问题。
以下是以下评论中要求提供的一些信息:
Nginx fastcgi.conf(与stock文件的差异):
fastcgi_intercept_errors on;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 16k;
fastcgi_max_temp_file_size 0;
fastcgi_keep_conn on;
Run Code Online (Sandbox Code Playgroud)
Nginx 配置细节:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
gzip off;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 1024;
types_hash_max_size 2048;
client_body_timeout 900;
client_header_timeout 900;
keepalive_timeout 900;
send_timeout 900;
proxy_connect_timeout 900s;
proxy_send_timeout 900s;
proxy_read_timeout 900s;
fastcgi_send_timeout 900s;
fastcgi_read_timeout 900s;
Run Code Online (Sandbox Code Playgroud)
Nginx 位置特定配置:
client_max_body_size 40M;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}
Run Code Online (Sandbox Code Playgroud)
php-fpm 配置详细信息:
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 1000
pm.start_servers = 300
pm.min_spare_servers = 200
pm.max_spare_servers = 350
pm.max_requests = 1000 ; I've tried higher/lower with no difference
slowlog = /var/log/php-fpm/www-slow.log
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php_error_log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
Run Code Online (Sandbox Code Playgroud)
安装版本:
php.x86_64 5.6.33-1.el6.remi @remi-php56
php-bcmath.x86_64 5.6.33-1.el6.remi @remi-php56
php-cli.x86_64 5.6.33-1.el6.remi @remi-php56
php-common.x86_64 5.6.33-1.el6.remi @remi-php56
php-devel.x86_64 5.6.33-1.el6.remi @remi-php56
php-fedora-autoloader.noarch 1.0.0-1.el6.remi @remi
php-fpm.x86_64 5.6.33-1.el6.remi @remi-php56
php-gd.x86_64 5.6.33-1.el6.remi @remi-php56
php-gmp.x86_64 5.6.33-1.el6.remi @remi-php56
php-imap.x86_64 5.6.33-1.el6.remi @remi-php56
php-mbstring.x86_64 5.6.33-1.el6.remi @remi-php56
php-mcrypt.x86_64 5.6.33-1.el6.remi @remi-php56
php-mysqlnd.x86_64 5.6.33-1.el6.remi @remi-php56
php-pdo.x86_64 5.6.33-1.el6.remi @remi-php56
php-pear.noarch 1:1.10.5-4.el6.remi @remi
php-pecl-igbinary.x86_64 2.0.5-1.el6.remi.5.6 @remi-php56
php-pecl-imagick.x86_64 3.4.3-5.el6.remi.5.6 @remi-php56
php-pecl-jsonc.x86_64 1.3.10-2.el6.remi.5.6 @remi-php56
php-pecl-jsonc-devel.x86_64 1.3.10-2.el6.remi.5.6 @remi-php56
php-pecl-memcache.x86_64 3.0.8-3.el6.remi.5.6 @remi-php56
php-pecl-memcached.x86_64 2.2.0-3.el6.remi.5.6 @remi-php56
php-pecl-msgpack.x86_64 0.5.7-1.el6.remi.5.6 @remi-php56
php-pecl-ssh2.x86_64 0.13-3.el6.remi.5.6 @remi-php56
php-pecl-zip.x86_64 1.15.2-1.el6.remi.5.6 @remi-php56
php-process.x86_64 5.6.33-1.el6.remi @remi-php56
php-xml.x86_64 5.6.33-1.el6.remi @remi-php56
nginx version: nginx/1.12.2
Kernel: 2.6.32-696.20.1.el6
Run Code Online (Sandbox Code Playgroud)
就我而言,这是因为 Netflix Zuul:
当我尝试上传超过 1 MB 的文件时,我从 nginx 日志中收到此消息:
读取上游时 readv() 失败(104:连接被对等方重置)
我的 Web 应用程序使用 Nginx 并重定向到 Netflix Zuul。所以我需要在properties.yml中设置这个配置
servlet:
multipart:
max-request-size: 10MB
max-file-size: 10MB
Run Code Online (Sandbox Code Playgroud)
这对我有用。
注意:如果将大小设置为 0 并且使用 spring security,它将超出限制。