【问题标题】:NGINX - PHP-FPM multiple application K8s/IngressNGINX - PHP-FPM 多应用 K8s/Ingress
【发布时间】:2019-02-02 02:12:39
【问题描述】:

我有一个带有 Ingress 的 k8s 应用程序,我想用它来为使用子域的不同应用程序提供服务。

这是我的完整配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: symfony-nginx
  namespace: default
  labels:
    app: symfony-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: symfony-nginx
  template:
    metadata:
      labels:
        app: symfony-nginx
    spec:
      volumes:
        - name: symfony-nginx
          configMap:
            name: symfony-nginx-configmap
      containers:
      - name: symfony-nginx
        image: nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/conf.d
          name: symfony-nginx
        resources:
          requests:
            memory: 32Mi
            cpu: 10m
          limits:
            memory: 64Mi
            cpu: 30m
        readinessProbe:
          httpGet:
            path: /nginx-health
            port: 80
          initialDelaySeconds: 15
          timeoutSeconds: 1
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /nginx-health
            port: 80
          initialDelaySeconds: 15
          timeoutSeconds: 1
          periodSeconds: 10
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: symfony-nginx-configmap
  namespace: default
data:
  default.conf: |
      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;
          }
      }
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: symfony-nginx-hpa
  namespace: default
  labels:
    app: symfony-nginx
spec:
  scaleTargetRef:
    kind: Deployment
    name: symfony-nginx
    apiVersion: apps/v1
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 70
---
apiVersion: v1
kind: Service
metadata:
  name: symfony-nginx-np
  namespace: default
  labels:
    app: symfony-nginx
spec:
  ports:
  - protocol: TCP
    port: 80
  selector:
    app: symfony-nginx
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: symfony-nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /symfony
        backend:
          serviceName: symfony-nginx-np
          servicePort: 80

而我只收到 'No route found for "GET /symfony"' 因为到达 php-fpm 的 uri 保留了 'symfony' 前缀。

如何让 NGINX 只发送 'symfony' 之后的部分 uri 到 php-fpm??

[更新]

也许这是一个 symfony 应用程序问题,因为我在http://mydomanin.com/symfony 上得到了 index.php 的响应,并带有 'No route found for "GET /symfony"' ?或者这是 NGINX 的责任?

谢谢你,问候

【问题讨论】:

    标签: php symfony nginx kubernetes


    【解决方案1】:

    最好的解决方案是为 symphony 中的所有路由设置 /symphony 前缀。

    另一种方法是在 nginx 上使用rewrite

    rewrite ^/symphony/(.*)$ /$1 last;
    

    但请注意后果! Symphony 将返回带有 '/myImage.jpg' 的图像 url,同样适用于 js/css/... 链接将是 '' 等等,这些页面不会映射到您的应用程序。

    【讨论】:

      【解决方案2】:

      最后我找到了解决办法。

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: symfony-nginx-ingress
      spec:
        rules:
        - http:
            paths:
            - path: /symfony
              backend:
                serviceName: symfony-nginx-np
                servicePort: 80
      

      这个 Ingress 配置只匹配 /symfony 路由,所以要完成它,你还需要添加 /symfony/* ...在我看来这不是很优雅...

      【讨论】:

        猜你喜欢
        • 2019-07-29
        • 2019-03-24
        • 2021-05-16
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 2020-08-08
        • 1970-01-01
        • 2014-11-26
        相关资源
        最近更新 更多