【问题标题】:php-fpm: File not found in kubernetesphp-fpm:在 kubernetes 中找不到文件
【发布时间】:2021-02-25 16:35:24
【问题描述】:

我正在尝试使用 2 个 pod(nginx + php-fpm)设置 k8s 部署,但我无法让 php-fpm 执行 php 脚本。网页显示File not found.,并在日志中:

  • fpm 吊舱:192.168.3.187 - 13/Nov/2020:16:44:06 +0000 "GET /index.php" 404
  • nginx 吊舱: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"

.html 文件按预期提供。

没有 nginx 的 Location ~ \.php$ 服务器块,我可以下载 .php 文件,所以问题出在 php-fpm;进入容器时,我可以看到脚本存在。

在我的部署中,NFS 上的 PersistentVolume 安装在两个 pod 上,位于 /app。 Nginx 是用这个 configMap 配置的:

  default.conf: |
    server {
    listen       80 default_server;
    server_name  _;

    add_header X-Backend-Server $hostname;
    
    root   /app;
    index index.php index.html;
 
         location / {
          try_files $uri $uri/ =404;
        }
        location ~ \.php$ {
          include fastcgi_params;
          fastcgi_param REQUEST_METHOD $request_method;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_pass phpfpm-deploy-svc.default.svc.cluster.local:9000;
        }
    }

其中phpfpm-deploy-svc.default.svc.cluster.local是PHP-FPM服务的DNS解析(与粘贴服务代码无关)。

php-fpm 是经典部署:

spec:
      containers:
      - name: phpfpm
        image: php:7.3-fpm
        ports:
          - containerPort: 9000
        volumeMounts:
          - name: nfs-volume
            mountPath: /app
      volumes:
        - name: nfs-volume
          persistentVolumeClaim:
            claimName: nfs-pvc

拥有自己的服务:

apiVersion: v1
kind: Service
metadata:
  name: phpfpm-deploy-svc
spec:
  ports:
  - port: 9000
  selector:
    app: phpfpm-deploy
  type: ClusterIP

这里看到的大多数解决方案都与fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 行有关:这是可能的,但我仍然需要找到一个可行的解决方案。

没有 k8s(只有 docker-compose),我可以创建这个配置而没有问题。

【问题讨论】:

    标签: php nginx kubernetes yaml fpm


    【解决方案1】:

    好吧,我上面的代码运行良好:NFS 服务器是问题所在,它没有对用户进行任何映射。

    因此,我能够从容器中将 NFS 卷上的文件列为 root……但不是作为 www-data,即运行 php-fpm 的用户。

    在 NFS 卷上设置正确的映射解决了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-04
      • 2021-04-02
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多