Nginx / PHP-FPM случайное содержимое тела сообщения в ответ

#php #laravel #nginx

#php #laravel #nginx

Вопрос:

У меня проблема со стеком NginX / php-fpm / Laravel. Содержимое тела сообщения случайным образом появляется в ответе, создавая недопустимый JSON. Пример запроса :

 POST / HTTP/1.1
Accept: application/json
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: host
Connection: close
User-Agent: Paw/3.2.1 (Macintosh; OS X/11.2.1) GCDHTTPRequest
Content-Length: 9

test=test
 

Ответ :

 HTTP/1.1 500 Internal Server Error
Server: nginx/1.14.0 (Ubuntu)
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close
Cache-Control: no-cache, private
Date: Tue, 16 Feb 2021 07:46:25 GMT

test=test{"error_message":"The POST method is not supported for this route."}
 

Ошибка является нормальной (для этого uri нет маршрута POST). Но, как вы можете видеть, тело сообщения появляется в ответе. (случайно, 1 из 5 раз запрос работает нормально)

Оно не поступает из стека Laravel, я протестировал его, установив var_dump / die поверх index.php (до загрузки Laravel) и возникает та же проблема.

Есть идеи?

Спасибо.

Ах, может быть, моя конфигурация NginX :

 server {
        access_log /var/log/nginx/access;
        error_log /var/log/nginx/error;

        root /root/devs/peps/www/public;
        index index.php index.html index.htm index.nginx-debian.html;

        server_name server_name;
        underscores_in_headers on;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ .php$ {
                fastcgi_split_path_info ^(. .php)(/. )$;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_pass 127.0.0.1:9002;
        }

        listen [::]:443 ssl;
        listen 443 ssl;

    ssl_certificate [path to cert]
    ssl_certificate_key [path to privkey]    
}
 

Комментарии:

1. вы уверены, что у вас где-нибудь нет эха запроса?

2. Я не думаю, что я когда-либо создавал эхо где-то в своих конфигурациях NginX / php-fpm, но если оно было, как я могу его найти?

3. это было бы где-то в вашей настройке laravel.

4. Ну, как я уже сказал, я уже сказал, что оно не может исходить из Laravel: «Оно не исходит из стека Laravel, я протестировал его, установив var_dump / die поверх index.php (до загрузки Laravel) и возникает та же проблема «.

5. Вы пробовали отключить кэширование nginx? docs.nginx.com/nginx/admin-guide/content-cache/content-caching

Ответ №1:

У меня была такая же проблема, и я решил ее, отключив кэширование nginx:

 location / {

        proxy_no_cache 1;
        proxy_cache_bypass 1;
        
        #.......
}
 

Комментарии:

1. Спасибо за комментарий и предложенное вами решение. Но было бы намного приятнее, если бы вы могли дать краткое объяснение того, какие параметры вы изменяете и что это значит. Если есть другие значения, которые вы можете присвоить параметру, обязательно упомяните и объясните их. Но в целом, поздравляю с вашим первым отправленным ответом!