在您阅读完整的问题之前,请不要回答:)
在新创建的 DigitalOcean CentOS 6.5(64 位)服务器中,我尝试创建两个 Apache 虚拟主机 - www.example-rose.com
并www.example-tulip.com
发出以下命令:
服务器端设置
# software installation
yum install httpd mod_fcgid php-cli
# added cgi.fix_pathinfo=1 in /etc/php.ini
echo "cgi.fix_pathinfo=1" >> /etc/php.ini
echo "PHP_Fix_Pathinfo_Enable 1" >> /etc/httpd/conf.d/fcgid.conf
# added new users and groups for the two virtual sites
groupadd rose
groupadd tulip
useradd -s /bin/false -d /var/www/rose -m -g rose rose
useradd -s /bin/false -d /var/www/tulip -m -g tulip tulip
chmod 755 /var/www/rose
chmod 755 /var/www/tulip
# create new document root and make them own by respective users
mkdir -p /var/www/rose/web
chown rose:rose /var/www/rose/web
mkdir -p /var/www/tulip/web
chown tulip:tulip /var/www/tulip/web
现在因为我想通过 SuEXEC 运行 PHP,我已经完成了为 SuEXEC 创建包装脚本的附加步骤
mkdir -p /var/www/php-fcgi-scripts/rose
mkdir -p /var/www/php-fcgi-scripts/tulip
# inside the wrapper, I added a file (/var/www/php-fcgi-scripts/rose/php-fcgi-starter)
# with below content:
#!/bin/sh
PHPRC=/etc/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
# changed the permission
chmod 755 /var/www/php-fcgi-scripts/rose/php-fcgi-starter
chown -R rose:rose /var/www/php-fcgi-scripts/rose
# above steps are repeated for tulip as well
最后我在我的 httpd.conf 文件中添加了以下内容以启用虚拟主机
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example-rose.com
ServerAlias example-rose.com
ServerAdmin webmaster@example-rose.com
DocumentRoot /var/www/rose/web/
<IfModule mod_fcgid.c>
SuexecUserGroup rose rose
<Directory /var/www/rose/web/>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/rose/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
ErrorLog /var/www/rose/error.log
CustomLog /var/www/rose/access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost *:80>
... similar lines for the second virtual host (Tulip). Cutting short ...
</VirtualHost>
我重新启动服务器并将一个 index.php 文件放在 web 目录中,内容如下:<?php phpinfo(); ?>
.
本地机器
为了测试虚拟主机,我从本地机器发出了以下命令,使用curl
$> curl -v -H "www.example-rose.com" 162.*.35.155/index.php
* Trying 162.*.35.155...
* Connected to 162.*.35.155 port 80 (#0)
> GET /index.php HTTP/1.1
> User-Agent: curl/7.30.0
> Host: www.example-rose.com
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 162.*.35.155 left intact
curl: (52) Empty reply from server
如果我尝试通过网络浏览器而不是curl
(在为域创建/etc/hosts
条目之后)访问,我会得到空白页。服务器中没有生成 Apache Access 日志或错误日志。如果我放置一个静态文件(而不是 php 文件),我可以毫无问题地访问该静态文件。但是 .php 文件不起作用。
然而
当我尝试curl
从DigitalOcean 的服务器本身(或从 DigitalOcean 网络中的其他服务器)访问时,我可以看到预期的 index.php 的phpinfo()
结果,没有任何问题。但是当我从 DO 的网络外部尝试时不起作用。
我已经完成了各种常见的故障排除(安装、重新安装、检查权限、一次又一次地检查 conf 文件等),现在我无能为力了。接下来呢?
在您阅读完整的问题之前,请不要回答:)