通过 SSL 执行 PHP CGI 脚本

通过 SSL 执行 PHP CGI 脚本

Amazon Linux 上的 Apache 2.4(我认为大致相当于 RH 7),带有各种版本的 PHP。

当启用 SSL 时,我在尝试让 PHP CGI 脚本在我的 Web 服务器上运行时遇到了问题。例如:

http://52.example.com/phpinfo.php

给出了正确的输出,但是当我启用 SSL 时(即https://52.example.com),我收到 404 错误:

The requested URL /php-fcgi/php-cgi-5.2.17/phpinfo.php was not found on this server.

以下是我的 /var/www/vhosts 目录中 52.conf 文件的内容:

 <VirtualHost *:443>

    ServerName 52.example.com

    DocumentRoot /var/www/vhosts/52

 <Directory "/var/www/vhosts/52/">

     AddHandler php-cgi .php
     Action php-cgi /php-fcgi/php-cgi-5.2.17

    <FilesMatch "\.php$">
            Options ExecCGI
            SetHandler php-cgi
    </FilesMatch>
 </Directory>

其中 site.conf 是虚拟主机定义。

以下是 php-cgi-5.2.17 文件的内容:

#!/bin/sh
version="5.2.17"

PHPRC=/opt/phpfarm/inst/php-${version}/lib/php.ini
export PHPRC

PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN

PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS

# which php-cgi binary to execute
exec /opt/phpfarm/inst/php-${version}/bin/php-cgi

您可能已经知道,我正在使用 PHPFarm 将不同版本的 PHP 提供给不同的子域。

请注意,我不知道一定SSL 是让我苦恼的根源,但它看起来非常可疑。

如果有人有任何想法或建议,我将不胜感激。提前致谢。

答案1

Apache 默认使用不同的主机配置文件作为默认 SSL 服务器。而且,我在您发布的配置片段中没有看到任何有关 SSL 的引用……

所以..它可能恢复到定义的默认主机并指向错误的 DocumentRoot。

运行apache2ctl-S 以查看当前运行时使用的名称/别名、地址和端口。它还会告诉您哪个配置文件定义了它以及定义从哪一行开始。

VirtualHost configuration:
10.99.88.55:443      is a NameVirtualHost
         default server example.com (/etc/apache2/sites-enabled/example.com.conf:1)
         port 443 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
                 alias www.example.com
         port 443 namevhost mail.example.com (/etc/apache2/sites-enabled/mail.example.com.conf:1)
         port 443 namevhost ww2.example.com (/etc/apache2/sites-enabled/ww2.example.com.conf:1)
*:80                   is a NameVirtualHost
         default server www.example.com (/etc/apache2/sites-enabled/000-default.conf:2)
         port 80 namevhost www.example.com (/etc/apache2/sites-enabled/000-default.conf:2)
                 alias example.com
         port 80 namevhost ww2.example.com (/etc/apache2/sites-enabled/000-default.conf:7)
         port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/000-default.conf:11)

编辑以包含一个主机定义示例,其中 SSL 指令指向 letsencrypt 证书,并在 http 上重定向同一站点以将其反弹到 https -

<VirtualHost 10.99.99.123:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    DocumentRoot /var/www-example.com
    <directory /var/www-example.com>
        Options All
        AllowOverride All
        Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    CustomLog ${APACHE_LOG_DIR}/ssl-example.com-access.log combined
</VirtualHost>
<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com
   Redirect permanent / https://www.example.com
</VirtualHost>

相关内容