Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx删除uri中的路径_Nginx_Kubernetes_Google Cloud Platform_Kubernetes Ingress - Fatal编程技术网

Nginx删除uri中的路径

Nginx删除uri中的路径,nginx,kubernetes,google-cloud-platform,kubernetes-ingress,Nginx,Kubernetes,Google Cloud Platform,Kubernetes Ingress,我需要删除请求uri中的部分路径。我正在使用Goocle云上的入口来访问服务器,如果我转到localhost/symfony/我希望在uri请求中忽略symfony路径 目前,若我转到localhost/symfony,它可以工作,但若我转到localhost/symfony/something,我会收到404默认后端。 我还尝试添加$1来设置请求url,但它不起作用 这是我的配置: apiVersion: apps/v1 kind: Deployment metadata: name: s

我需要删除请求uri中的部分路径。我正在使用Goocle云上的入口来访问服务器,如果我转到localhost/symfony/我希望在uri请求中忽略symfony路径

目前,若我转到localhost/symfony,它可以工作,但若我转到localhost/symfony/something,我会收到404默认后端。 我还尝试添加$1来设置请求url,但它不起作用

这是我的配置:

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:stable
        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 ~ ^/index\.php(/|$) {

                set $request_url $request_uri;
                if ($request_uri ~ ^/symfony(.*)$ ) {
                    set $request_url /;
                }
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass symfony:9000;
                include fastcgi_params;
                fastcgi_param  REQUEST_URI $request_url;
                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
    targetPort: 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
有什么建议吗

唐斯克很多


Pasquale

您需要在入口对象中使用注释来重写URI。
nginx.ingres.kubernetes.io/rewrite target
注释以必须重定向流量的URI为目标。例如:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
      name: symfony-nginx-ingress
    spec:
      rules:
      - http:
          paths:
          - path: /symfony
            backend:
              serviceName: symfony-nginx-np
              servicePort: 80
在本例中,它将把URI从
localhost/symfony/
重写为
localhost/


请注意,它适用于Ingress对象中描述的所有端点。

您需要使用Ingress对象中的注释来重写URI。
nginx.ingres.kubernetes.io/rewrite target
注释以必须重定向流量的URI为目标。例如:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
      name: symfony-nginx-ingress
    spec:
      rules:
      - http:
          paths:
          - path: /symfony
            backend:
              serviceName: symfony-nginx-np
              servicePort: 80
在本例中,它将把URI从
localhost/symfony/
重写为
localhost/


请注意,它适用于Ingress对象中描述的所有端点。

我忘了说我正在使用Google cloud,似乎不支持此功能您可以安装自己的Nginx入口控制器,并使用云负载平衡器将其公开。下面是一个例子:我忘了说我正在使用谷歌云,似乎这个功能不受支持您可以安装自己的Nginx入口控制器,并使用云负载平衡器将其公开。以下是一个例子: