php - NGINX使用Slim API框架从子目录重定向到根

标签 php nginx kubernetes slim nginx-ingress

我想将对子目录v1(subdomain.domain.com/v1)的请求转发到我在Nginx中的根目录。尝试thisthis答案(以及更多变化)没有成功。我使用Slim API框架。
我的nginx配置看起来像这样:

    events {
}
http {
  include /etc/nginx/mime.types;
  server {
    listen 80;
    server_name subdomain.domain.com;
    root /var/www/html;
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
    location /healthcheck {
      auth_basic off;
      allow all;
      return 200;
    }
    location / {
      if (!-f $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
      }
    }
    #location ~ \.php {
    # only allow index.php to be proxied to FastCGI process (more secure than all php files!)
    location /index.php {
      proxy_pass http://127.0.0.1:9000;
    }
    location location ~ ^/v1/(.*) {
      return 301 $scheme://$http_host/$1$is_args$query_string;
    }
  }
}
我的入口Yaml(Kubernetes)看起来像这样:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: ingress-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
 namespace: NAME_OF_NAMESPACE
 annotations:
   kubernetes.io/ingress.class: gce
   kubernetes.io/ingress.global-static-ip-name: ip-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
   networking.gke.io/managed-certificates: cert-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
   kubernetes.io/ingress.allow-http: "false"
spec:
  rules:
    - host: NAME_OF_DOMAIN
      http:
        paths:
          - path: /v1/*
            backend:
              serviceName: svc-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
              servicePort: 443
我只能让此东西在没有/ v1的情况下运行(只是subdomain.domain.com)。任何指导表示赞赏。

最佳答案

我认为最好的方法是使重定向发生在入口级别,甚至在到达入口之前。但是,GCE入口尚不支持HTTP to HTTPS重定向,更不用说任何类型的重定向了。
您拥有的方式基本上是这样的:入口获取/v1请求,然后转到Nginx,然后说重定向到/,但该重定向请求又回到入口,这说我不知道​​如何处理/请求。
另一种方法是让后端在/v1上提供服务,或者使用非常普遍的两层方法。 GCE LB(无入口 Controller )➡️Nginx入口(执行重定向并具有更丰富的功能集)➡️后端。

关于php - NGINX使用Slim API框架从子目录重定向到根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906711/

相关文章:

php - Sugarcrm 批量复制一个表到另一个数据库表(cronjob)

php - MYSQL导航栏将类别添加到类别表,但检查类别是否已存在

NGINX 一个域上的多个应用程序

kubernetes - Prometheus 查询 pod 内存使用性能分位数

networking - 在不同的网络上安装Kubernetes + Cilium

php - 使用 composer 安装 propel

nginx - 指定--restart开关后,为什么我的Nginx docker 容器无法启动

nginx - 无法启动 nginx.service : Unit not found

docker - NAT服务暴露背后的Kubernetes节点

php - 为什么在 paypal 集成中金额为零?