该服务器运行的是 Ubuntu 10.10、Apache 2.2.16、PHP 5.3.3-1ubuntu9.3、phpMyAdmin 3.3.7deb5build0.10.10.1。由于同一台服务器也在端口 443 上运行 Zimbra,因此我已将 apache 配置为在端口 81 上提供 SSL。到目前为止,我已在此虚拟主机上成功运行了一个 CMS 脚本。
然而,当我通过自定义 SSL 端口访问 /phpmyadmin(使用默认别名设置)并提交登录表单时,我被重定向到http://vhost.domain.com:81/index.php?TOKEN=foo(请注意,登录 URL 使用的是 http:// 而不是 https://)。这会生成错误 400 Bad Request,抱怨“向启用 SSL 的服务器端口发送纯 HTTP”。然后,我可以手动将 URL 中的 http:// 更改为 https://,并按预期使用 phpmyadmin。
我非常恼火,花了一个小时试图修复它,现在更恼火的是,我无法弄清楚。我尝试了各种方法,包括:
添加$cfg['PmaAbsoluteUri'] = 'https://vhost.domain.com:81/phpmyadmin/';到 /usr/share/phpmyadmin/config.inc.php 文件,但这并不能解决问题(即使 /usr/share/phpmyadmin/libraries/auth/cookie.auth.lib.php 看起来应该尊重它并将其用作重定向)。
添加$cfg['ForceSSL'] = 1;到相同的 config.inc.php 但随后 apache 陷入无限重定向。
添加重写规则到 apache 中的 vhost-ssl conf 文件,但我无法弄清楚当 http:// 以及正确的 ssl 端口 :81 存在时要使用的条件。
很多谷歌搜索。
以下是相关的 Apache 配置部分:
/etc/apache2/ports.conf
<IfModule mod_ssl.c>
NameVirtualHost *:81
Listen 81
</IfModule>
/etc/apache2/sites-enabled/vhost-nonssl
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName vhost.domain.com
DocumentRoot /home/xxx/sites/vhost/html
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}:81%{REQUEST_URI}
</Virtualhost>
/etc/apache2/sites-enabled/vhost-ssl
<VirtualHost *:81>
ServerAdmin webmaster@localhost
ServerName vhost.domain.com
DocumentRoot /home/xxx/sites/vhost/html
<Directory />
Options FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "Restricted Vhost"
AuthUserFile /home/xxx/sites/vhost/.users
Require valid-user
</Directory>
<Directory /home/xxx/sites/vhost/html/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
/etc/apache2/conf.d/phpmyadmin.conf
Alias /phpmyadmin /usr/share/phpmyadmin
(默认 .conf 的其余部分被截断。)
apache 配置中的一切似乎都工作正常 - 从非 SSL 到 SSL 的重写,http 身份验证,问题只发生在我从 提交 phpmyadmin 的登录表单时https://vhost.domain.com:81/index.php。
其他配置:
phpmyadmin 配置完全是默认的,php.ini 只对内存和超时限制做了一些小改动。这些似乎运行良好,如前所述,另一个 php 脚本运行没有问题,而且一旦我在登录后手动输入正确的架构,phpmyadmin 就可以正常工作。
我正在寻找可以添加的创可贴,以避免登录后手动输入 https:// 的麻烦,或者一个真正的修复程序,使 phpmyadmin 按照我认为应该的方式运行,或者更好地理解为什么我想要的配置是不可能的。
答案1
我手头上的旧版本的 phpmyadmin 在 /phpmyadmin/config.inc.php 中有这个
$cfg['PmaAbsoluteUri'] = 'http://127.0.0.1/phpmyadmin';
您可以尝试更改http
为https
(和其他适当值)并查看是否会产生影响。