【发布时间】: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