【问题标题】:Nginx rewrite-target overwritting domain/suffix/index.php to domain/index.phpNginx rewrite-target 将 domain/suffix/index.php 覆盖为 domain/index.php
【发布时间】:2021-01-02 21:11:36
【问题描述】:

最近我部署了一个运行 wordpress 实例和 phpmyadmin 的 kubernetes 集群。我正在使用 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: "/$2"
    # 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
  

【问题讨论】:

  • 此配置按设计工作。如果您检查Ingress rewrite docs,它会将rewrite.bar.com/something/ 重定向到rewrite.bar.com/,我猜index.php 是这里的默认后端。另外,您使用的是哪个入口版本? nginx.ingress.kubernetes.io/add-base-url 已在 v0.22 中删除。当你curl它时你得到什么回应?
  • @PjoterS 感谢您的回复。是的,我确实看到它是设计使然,但我面临的问题也是一个用例。目前我正在使用 v0.35,我得到的响应是 302 found。

标签: nginx kubernetes google-kubernetes-engine kubernetes-ingress nginx-reverse-proxy


【解决方案1】:

我想说问题不在Nginx Ingress 方面。

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

应该适合你。

但是还有第二部分,myphpadmin 的配置。由于您没有提供此配置,我猜想是什么原因导致此问题。

phpmyadmin docs中提到的,有时需要设置$cfg['PmaAbsoluteUri']

在某些设置(如单独的 SSL 代理或负载平衡器)中,您可能必须设置 $cfg['PmaAbsoluteUri'] 才能正确重定向。

由于我基于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 的情况下使用暴露phpmyadmin

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

简而言之:

  • Nginx 入口配置看起来没问题
  • 检查您的myphpadmin 配置,尤其是PMA_ABSOLUTE_URI

【讨论】:

  • 感谢您指导我解决这个问题。事实证明,我的 phpmyadmin docker 映像没有 PMA_ABSOLUTE_URI env,因为我使用的是 bitnami/phpmyadmin 我切换到 phpmyadmin:5.0.1 并且它有效。非常感谢!! :)
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2021-05-20
  • 2015-02-01
  • 1970-01-01
  • 2012-08-01
  • 2022-08-19
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多