Skip to content
Advertisement

php-fpm: File not found in kubernetes

I’m trying to set a k8s deployment with 2 pods (nginx + php-fpm), but I can’t get php-fpm to execute the php scripts. The webpage displays File not found., and in logs :

  • fpm pod : 192.168.3.187 - 13/Nov/2020:16:44:06 +0000 "GET /index.php" 404
  • nginx pod : 2020/11/13 16:44:06 [error] 20#20: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.1.45, server: _, request: "GET / HTTP/1.1", upstream: "fastcgi://10.98.178.35:9000", host: "192.168.1.220"

The .html files are served as expected.

Without the Location ~ .php$ server block of nginx I’m able to download .php files, so the problem is really with php-fpm; when entering the container, I can see the scripts are present.

In my deployment, a PersistentVolume on an NFS is mounted on both pods, in /app. Nginx is configured with this configMap :

JavaScript

Where phpfpm-deploy-svc.default.svc.cluster.local is the DNS resolution of the PHP-FPM service (irrelevant to paste the service code).

php-fpm is a classic deployment :

JavaScript

with its own service :

JavaScript

Most of the solutions seen here are related to the line fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;: that’s possible, but I still has to find a working one.

Without k8s (only docker-compose), I can create this configuration witout issue.

Advertisement

Answer

Well, my code above is working fine : the NFS server was the problem, it wasn’ doing any mapping on users.

So I was able, from containers, to list the files on the NFS volume as root… but not as www-data, which is the user running php-fpm.

Setting correct mapping on the NFS volume solved it.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement