Kubernetes中Nginx Ingress未正确生成FastCGI配置问题排查
问题根因与解决方案
你的Ingress配置缺少Nginx Ingress Controller识别FastCGI服务的关键注解,导致Controller默认将后端服务当作HTTP服务处理,生成了proxy_pass配置而非fastcgi_pass。用HTTP协议去连接FastCGI端口(9000)必然会出现协议不匹配,引发连接重置和502错误。
修正后的Ingress配置示例
你需要添加FastCGI相关注解,告诉Ingress Controller用FastCGI协议转发请求:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: php-fpm-ingress annotations: # 核心注解:指定后端为FCGI协议 nginx.ingress.kubernetes.io/backend-protocol: "FCGI" # 指定PHP默认入口文件 nginx.ingress.kubernetes.io/fastcgi-index: "index.php" # 必须配置:用ConfigMap传递FastCGI必要参数,否则PHP-FPM无法正确处理请求 nginx.ingress.kubernetes.io/fastcgi-params-configmap: "php-fpm-fastcgi-params" spec: ingressClassName: nginx rules: - host: your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: php-fpm-service port: number: 9000
必要的FastCGI参数ConfigMap
PHP-FPM需要SCRIPT_FILENAME等参数才能正确解析请求,创建如下ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: php-fpm-fastcgi-params data: SCRIPT_FILENAME: "$document_root$fastcgi_script_name" QUERY_STRING: "$query_string" REQUEST_METHOD: "$request_method" CONTENT_TYPE: "$content_type" CONTENT_LENGTH: "$content_length"
验证逻辑
添加注解后,Nginx Ingress Controller会自动生成包含fastcgi_pass的配置,同时注入你定义的FastCGI参数,此时请求会以正确的FastCGI协议转发到PHP-FPM容器,解决502和连接重置问题。
内容的提问来源于stack exchange,提问作者wcb
相关产品推荐
相关产品推荐

