使用 OpenBSD 的 httpd 进行 HTTP -> HTTPS 重定向

使用 OpenBSD 的 httpd 进行 HTTP -> HTTPS 重定向

运行 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 请求启用此选项。

相关内容