![通过 SSL 执行 PHP CGI 脚本](https://linux22.com/image/702577/%E9%80%9A%E8%BF%87%20SSL%20%E6%89%A7%E8%A1%8C%20PHP%20CGI%20%E8%84%9A%E6%9C%AC.png)
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>