运行 OpenBSD 4.4-stable,带有内置 httpd 守护程序和 PHP5,后者已从 Ubuntu 8.04-server 框中移出。自从移动以来,phpMyAdmin 似乎时常生成以下错误(有时总是生成,比如登录时):
Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
phpMyAdmin 的地址位于 https:// URL 下,当发生此错误时,phpMyAdmin 正在尝试使用http://domain.com:443/这显然是行不通的。
我还有一个 mod_rewrite 规则来始终强制使用 HTTPS,但由于浏览器强制使用 443 端口,因此它永远不会被触发。
有什么想法可以解决这个问题吗?
[编辑]
以下是我的 vhost 指令,因为这些是被请求的:
<VirtualHost *:80>
DocumentRoot /var/www/htdocs
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/htdocs
ErrorLog logs/error_log
TransferLog logs/access_log
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</VirtualHost>
[编辑2]
我关闭了重写规则,一切都运行正常 :/ 不确定该怎么做,因为相同的重写规则在其他地方也有效。
答案1
在我的 PHPMyAdmin 设置中,我有一个如下所示的 apache 配置:
<VirtualHost 72.233.89.20:80>
ServerName mysql
ServerAlias mysql.*
UseCanonicalName Off
DocumentRoot /var/www/phpmyadmin/html/
DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .php
php_admin_value open_basedir /var/www/phpmyadmin/
php_admin_value file_uploads 1
php_admin_value upload_tmp_dir /var/www/phpmyadmin/phptmp/
php_admin_value session.save_path /var/www/phpmyadmin/phptmp/
</VirtualHost>
#
######
# Interface for https (openssl)
######
#
<IfModule mod_ssl.c>
<VirtualHost 72.233.89.20:443>
ServerName mysql
ServerAlias mysql.*
UseCanonicalName Off
DocumentRoot /var/www/phpmyadmin/ssl
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key
DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .php
php_admin_value open_basedir /var/www/phpmyadmin/
php_admin_value file_uploads 1
php_admin_value upload_tmp_dir /var/www/phpmyadmin/phptmp/
php_admin_value session.save_path /var/www/phpmyadmin/phptmp/
</VirtualHost>
</IfModule>
请注意它是在端口 80 和端口 443 上设置的。
在 http 的 webroot(端口 80)中,我只有一个如下所示的 .htaccess 文件:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
将其全部重定向到 SSL。
所有 PHPMyAdmin 文件都位于 SSL 目录中。
我建议将您的虚拟主机设置为在端口 80 和端口 443 上提供服务。PHPMyAdmin 本身只是一个 php 脚本,它不会强制任何端口。这完全取决于您的 webserver/vhosts 的配置方式。
答案2
由于浏览器通常不会从端口 80 重定向到端口 443,因此可能是 phpmyadmin 返回的第一个页面导致了更改。查看您的 phpmyadmin 配置以查看以下情况有何不同:
- 配置.inc.php
$cfg['ForceSSL'] 布尔值
访问 phpMyAdmin 时是否强制使用 https。
根据文档,它默认处于开启状态,但由于 mod_rewrite 正在运行,因此可能会出现“断开连接?”
现在似乎每个人都在针对 Microsoft IE 添加如下规定:
设置环境变量为“用户代理”。MSIE。“nokeepalive ssl-不干净关闭”
否则, ...
使用 OpenBSD Apache 2.0.x 软件包会对您产生什么影响吗?
看来您的 Ubuntu 配置将使用 Apache 2.0,并且您已将系统(和配置)移至使用 Apache 1.3.x 的默认 OpenBSD 配置
我认为您至少需要查看 WerkkreW 显示的 php_admin_value。
当简单的事情不起作用时,我们总是可以提高日志级别数据并从中查看结果。虽然嘈杂,但始终是一种选择。
启用 SSLOptions StdEnvVarsApache 配置
StdEnvVars 启用此选项后,将创建一组标准的 SSL 相关 CGI/SSI 环境变量。出于性能原因,默认情况下禁用此选项,因为信息提取步骤是一项相当昂贵的操作。因此,通常只对 CGI 和 SSI 请求启用此选项。