Apache mod_ssl StdEnvVars 似乎未设置?

Apache mod_ssl StdEnvVars 似乎未设置?

我有一台 CentOS 6.5 服务器,运行带有 mod_ssl 的 Apache 2.2.15 和 PHP 5.3.3。我的问题是 PHP 似乎无法识别 HTTPS 连接。

我的文件中有以下内容/etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443
# IPs below anonimized, they are the actual IPs of the server
NameVirtualHost 127.0.0.1:443
NameVirtualHost [::1]:443

SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

# Anonimized IPs here too, but the actual IPs are set
<VirtualHost 127.0.0.1:443 [::1]:443>
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn

    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

    SSLCertificateFile /etc/ssl/certs/my.crt
    SSLCertificateKeyFile /etc/ssl/certs/my.key
    SSLCACertificateFile /etc/ssl/certs/PositiveSSLCA2.crt

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>

    SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

这个配置有效,/etc/httpd/conf.d/vhosts.conf当我在我的服务器上(我为该服务器定义了所有 vhost)添加此 IP 地址上的 vhost 时,一切都按预期运行。该网站通过 HTTPS 提供正确的证书,浏览器显示绿色锁和所有内容。

如果我运行 phpinfo 脚本,我会得到意外的输出。例如,在 Configuration/apache2handler 部分中,端口号为零:

Hostname:Port   example.com:0

另外,在“Apache 环境”下,我看到了奇怪的值(请记住,我实际上是通过 HTTPS 访问此页面,并且浏览器显示绿色锁等):

SCRIPT_URI  http://www.example.com/test.php
SERVER_PROTOCOL HTTP/1.1

脚本 URI 中没有“https”,协议只是普通的 HTTP/1.1?

此外,mod_ssl环境变量似乎已设置,而我的 ssl.conf 确实SSLOptions +StdEnvVars为 PHP 文件设置了选项。

为什么 PHP 无法识别请求是通过 SSL 发出的?我现在至少HTTPS在 vhost 配置中手动设置了环境变量,然后成功设置:

SetEnv HTTPS On

理想情况下,这个 var 应该已经由 mod_ssl 设置了,为什么没有呢(或者为什么 PHP 错过了它)?

相关内容