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