如何使 phpmyadmin 与反向代理和普通 IP:PMA_PORT 连接一起工作?

如何使 phpmyadmin 与反向代理和普通 IP:PMA_PORT 连接一起工作?

我有一个 kubernetes 集群,配置如下:
nginx+wp[:5050]<-- 重定向 307 /wpnginx[:80:443]/pma rev_proxy -->nginx+pma[:5000]

所有服务共享一个公共的外部 metallb IP。我对此配置有几个问题:

  1. nginx+wordpress 服务器正在监听配置为使用 SSL 的非标准端口 5050,因此当我尝试通过 METALLB_IP:5050 直接连接到该服务器时出现错误“纯 HTTP 请求已发送至 HTTPS 端口”这是意料之中的,因为浏览器无法知道服务器正在等待 https 请求。我尝试通过在 nginx+wordpress 配置中添加以下行来解决这个问题:
    error_page 497 301 =307 https://$host:$server_port$request_uri;
    它解决了协议错误的问题,但又引入了新的问题:现在,当我尝试通过 METALLB_IP:5050/wp-admin 访问我的 wordpress 管理面板时,我得到了'错误太多'- 我猜是因为 wp-admin 自己重定向,导致无限循环。我尝试将其添加define( 'REDIRECTION_DISABLE', true );到我的 wp-config.php,但错误仍然存​​在。注意:此服务只允许打开一个端口 [:5050]!

  2. 我已经使用以下块设置了 phpmyadmin 的反向代理:

location /phpmyadmin/ {
    proxy_pass https://phpmyadmin-service:5000/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

但在我输入我的名字和密码并点击“Go”后,我的 uri 变成https://METALLB_IP/index.php“404 未找到”因为我的 nginx+phpmyadmin 服务器监听的是端口 5000,而不是 80/443!我还应该提一下,这个错误只有在尝试通过反向代理连接时才会发生,如果我指定 METALLB_IP:5000 进行连接,一切都会正常。

如能提供任何建议或与文档相关部分的链接,我们将不胜感激!

编辑:我现在有一个针对 phpmyadmin 反向代理的半成品解决方案:如果我将其添加$cfg['PmaAbsoluteUri'] = '/phpmyadmin';到我的 config.inc.php,METALLB_IP/phpmyadmin 登录/注销就会开始工作!但此解决方案的缺点是,现在通过 METALLB_IP:5000 直接连接的登录会出现此错误:“无法设置会话 cookie。也许您使用 HTTP 而不是 HTTPS 来访问 phpMyAdmin。”此问题可能与#16496
我当前的 phpmyadmin 5.0.4 配置:

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['host'] = "mysql-service";
$cfg['Servers'][$i]['port'] = "3306";
$cfg['Servers'][$i]['user'] = "mysql";
$cfg['Servers'][$i]['password'] = "mysql";
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['PmaAbsoluteUri'] = '/phpmyadmin';

答案1

对于 WordPress,您需要在 WordPress 配置中添加以下项目:

define('WP_HOME', 'https://example.com`);
define('WP_SITEURL', 'https://example.com');

这将让 WordPress 知道您在浏览器中用来访问网站的 URL 是什么。将其替换example.com为您的域名。

对于 PHPMyAdmin,请尝试删除配置之外的所有内容proxy_pass。至少在反向代理情况下,我让 PHPMyAdmin 以这种方式工作。

相关内容