Nginx重写目标覆盖域/后缀/index.php到域/index.php



最近我部署了一个运行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

我认为问题不在Nginx Ingress方面。

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

应该能正常工作。

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

就像phpmyadmin文档中提到的,有时您需要设置$cfg['PmaAbsoluteUri']

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

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

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

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

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

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

想要了解更多信息,你可以阅读这篇文章。

简而言之:

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

最新更新