nginx-如果index.php不在nginx文件夹中,则禁止使用php fpm
我们正在尝试使用kubernetes在GCP上部署应用程序。我们仅使用PHP-FPM创建一个容器/pod,使用NGINX创建另一个容器/pod 我们进行了部署,所有的工作都正常,但是当我们尝试获取名为index.php的“helloword”php文件时,我们从NGINX服务收到一个错误403 因此,我尝试进入NGINX pod并在php项目的根(/var/www/html/symfony/public)手动添加index.php。当我这样做时,NGINX神奇地返回PHP-FPM脚本,而不是pod中创建的文件。 为了让您了解,我附加了NGINX配置nginx-如果index.php不在nginx文件夹中,则禁止使用php fpm,php,nginx,kubernetes,google-cloud-platform,fpm,Php,Nginx,Kubernetes,Google Cloud Platform,Fpm,我们正在尝试使用kubernetes在GCP上部署应用程序。我们仅使用PHP-FPM创建一个容器/pod,使用NGINX创建另一个容器/pod 我们进行了部署,所有的工作都正常,但是当我们尝试获取名为index.php的“helloword”php文件时,我们从NGINX服务收到一个错误403 因此,我尝试进入NGINX pod并在php项目的根(/var/www/html/symfony/public)手动添加index.php。当我这样做时,NGINX神奇地返回PHP-FPM脚本,而不是po
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/symfony/public;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass symfony:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
NGINX服务器使用kubernetes DNS将请求重定向到PHP-FPM服务器symfony:9000
[编辑]
是的,我还有一项服务允许NGINX与PHP-FPM通信:
apiVersion: apps/v1
kind: Deployment
metadata:
name: symfony
namespace: default
labels:
app: symfony
spec:
selector:
matchLabels:
app: symfony
replicas: 1
template:
metadata:
labels:
app: symfony
tier: back
spec:
containers:
- name: symfony
image: gcr.io/myphone-mmpk/symfony:v.80
#TODO: REMOVE THIS
imagePullPolicy: Always
ports:
- containerPort: 9000
resources:
requests:
memory: 16Mi
cpu: 1m
limits:
memory: 128Mi
cpu: 20m
---
kind: Service
apiVersion: v1
metadata:
name: symfony
namespace: default
spec:
selector:
app: symfony
type: NodePort
ports:
- protocol: TCP
port: 9000
targetPort: 9000
这是ku8的nginx清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: html
emptyDir: {}
- name: nginx
configMap:
name: nginx-configmap
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: nginx
- mountPath: /var/www/html/symfony/public
name: html
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configmap
namespace: default
data:
default.conf: |
server {
index index.php index.html;
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/symfony/public;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass symfony:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
labels:
app: nginx
spec:
scaleTargetRef:
kind: Deployment
name: nginx
apiVersion: apps/v1
minReplicas: 1
maxReplicas: 5
targetCPUUtilizationPercentage: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
labels:
app: nginx
spec:
ports:
- protocol: TCP
port: 80
selector:
app: nginx
type: LoadBalancer
loadBalancerIP: ~
您需要为每个应用程序创建一个kubernetes服务,描述应用程序的公开端口。或者将容器放在同一个pod中并使用localhost:9000 内部kube DNS将类似于
my svc.my namespace.svc.cluster.local
您不需要端口信息,因为服务中将描述这些信息
请参见我使用此NGINX配置解决问题。这不是库伯尼特斯的问题
server {
server_name php-docker.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/symfony/public;
proxy_buffering off;
location = /nginx-health {
access_log off;
return 200 "healthy\n";
}
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass symfony:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
internal;
}
location ~ \.php$ {
return 404;
}
}
这是因为您需要为index.php所在的文件夹提供正确的安全权限/var/www/html/symfony/public/似乎Nginx无法访问该文件。您正在使用php fpm讨论pod中的文件?如果我将chmod改为777,它仍然会响应403 Foribeden,没有任何变化…我问你如何部署你的代码,因为我没有看到它存储的任何剧本,只有
-mountPath:/var/www/html/symfony/public name:html
,但它是作为emptyDir:{}
装载的,所以应该没有任何内容。我使用DNS,因为如果我在NGINX目录中手动添加一个空文件(与php fpm的目录相同),它就可以工作了。嗯,不确定-在第一次检查时,我觉得您的k8s配置看起来不错是的,看起来不错。。。出于这个原因,我不知道为什么它不起作用…:(