Nginx 重写目标覆盖 domain/suffix/index.php 到 domain/index.php

Nginx rewrite-target overwritting domain/suffix/index.php to domain/index.php

最近我部署了一个 kubernetes 集群,它是 运行 wordpress 实例和 phpmyadmin。我正在使用 Nginx 入口控制器为这两个服务执行基于路径的路由。但是,对 / 的请求没有任何麻烦,但是当我请求 domain.com/phpmyadmin/ 时,我得到一个登录页面,之后我被重定向到 domain.com/index.php 而不是 domain.com/phpmyadmin/index.php。请建议我可能为此转身。谢谢大家的支持:)

我的ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations: 
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/add-base-url : "true"
    nginx.ingress.kubernetes.io/rewrite-target: "/"
    # ingress.kubernetes.io/rewrite-target: "^/phpmyadmin/"
spec:
  rules:
    - host: example.domain.com
      http:
        paths:
          - path: /
            backend:
              serviceName: wordpress
              servicePort: 80
          - path: /phpmyadmin(/|$)(.*)
            backend:
              serviceName: phpmyadmin
              servicePort: 80
  

我想说问题不在 Nginx Ingress 那边。

nginx.ingress.kubernetes.io/rewrite-target: "/"
...
- path: /phpmyadmin(/|$)(.*)

应该适合你。

不过还有第二部分,myphpadmin的配置。由于您没有提供此配置,我猜是什么导致了这个问题。

phpmyadmin docs中所述,有时需要设置$cfg['PmaAbsoluteUri']

In some setups (like separate SSL proxy or load balancer) you might have to set $cfg['PmaAbsoluteUri'] for correct redirection.

因为我是基于this configuration,很多取决于你如何配置PMA_ABSOLUTE_URI,是http://somedomain.com/phpmyadmin还是不同? 很重要,因为您可能会遇到这样的情况:

  • 当您进入 http://somedomain.com/phpmyadmin 并登录时,您将被重定向到 http://somedomain.com/,因此 Ingress 会将您重定向到 path: / 设置在入口
  • 如果您再次输入 http://somedomain.com/phpmyadmin,您将能够看到 phpmyadmin 内容,就像您已经登录一样。

您可以尝试在 myphpadmin 部署中添加 env。它看起来像下面这样:

  env:
    - name: PMA_ABSOLUTE_URI
      value: http://somedomain.com/myphpadmin/

最后,不建议在没有 https 的情况下使用 expose phpmyadmin

有关更多信息,您可以阅读 this 文章。

简而言之:

  • Nginx 入口配置看起来不错
  • 检查您的 myphpadmin 配置,尤其是 PMA_ABSOLUTE_URI