- 有一个网站
- 这个网站可以通过www.example.org访问
- 有一个EC2实例很可能保存着这个网站
- 服务器是Apache
- 服务器操作系统是Ubuntu
- 我对服务器拥有完全访问权限(以及sudo特权)
- 服务器非常混乱
# apachectl -t -D DUMP_VHOSTS
当你找到一个网站时,检查相应的配置文件以查找选项DocumentRoot。例如:
# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
port 80 namevhost 192.168.88.87 (/etc/httpd/conf.d/192.168.88.87.conf:1)
port 80 namevhost gl-hooks.example.net (/etc/httpd/conf.d/hooks.conf:1)
alias example.net
alias www.example.net
你想知道网站example.net的所在位置。
# grep DocumentRoot /etc/httpd/conf.d/hooks.conf
DocumentRoot /vhosts/gl-hooks.example.net/
# cd /vhosts/gl-hooks.example.net/
# ls -la
total 4484
drwxr-xr-x 6 apache apache 4096 Feb 10 11:59 .
drwxr-xr-x 14 root root 4096 Feb 23 08:54 ..
-rw-r--r-- 1 root root 1078 Dec 19 09:31 favicon.ico
-rw-r--r-- 1 apache apache 195 Dec 25 14:51 .htaccess
-rw-r--r-- 1 apache apache 98 Dec 7 10:52 index.html
你还应该注意别名和重定向/重写。例如,使用以下设置:
<VirtualHost *:80>
ServerName example.net
ServerAlias www.example.net
...
DocumentRoot /vhosts/default/public_html/
Alias /api/ /vhosts/default/public_api/
...
</VirtualHost>
当你访问http://example.net/some.file.html时,Apache会在/vhosts/default/public_html/目录下查找文件,而当你访问http://example.net/api/some.file.html时,文件将在/vhosts/default/public_api/目录下查找。
至于重写/重定向,特别是程序化的情况(当重定向由某些PHP代码触发时),我认为没有简单的方法来找到这样的情况。
find / -type f \( -iname "*index.html*" -o -iname "*index.php*" \) 2> /dev/null
否则假设Apache已从Ubuntu存储库安装,请查看/etc/apache2/sites-available目录。
grep -niR "thedomainname" /etc/apache2/sites-available
如果网站定义了apache VHOST,那么可能会找到配置文件,然后在该文件中查找"documentroot",这将告诉您源代码的位置。
-type f只适用于你命令中的-iname "*index.html*"。应该改为-type f \( -iname "*index.html*" -o -name "*index.php*" \)。 - user341384另一种方法,可以用于调试网站(或任何进程),是使用 lsof(可能不在路径上,通常位于 /sbin/lsof)
lsof -s [PID] 将列出给定进程拥有句柄的所有文件,并且可以用于查看正在使用的准确内容(包括您的 HTML/PHP 文件,以及站点所需的日志文件和库文件)
locate newcontactform.php
如果那不起作用,然后跟着做。
find / -name newcontactform.php
这应该会产生一个可管理的候选人名单。
然后,您可以检查文件,进行差异比较,如果有必要,尝试进行小的更改(例如插入HTML注释)以验证文件确实生成页面。
找到配置文件
有时,配置文件在ps命令的输出中是明显的。最糟糕的情况是ps -ef | grep -e 'apache|httpd',但更有创意地使用ps选项可能值得探索。
您可以在Ubuntu和Apache httpd项目(可能不同)的典型位置中寻找httpd.conf,或者只需像上面那样使用locate和find。
有时,主配置文件会引用其他虚拟主机的配置文件。您可以通过识别主配置文件来解决这个问题。
慢性病例
有时,旧服务器运行各种Web服务器守护程序。在这种情况下,找到它们并确定它们的配置文件所在位置可能需要一些时间。上述技术的组合最终应该能够成功。
你可以使用netstat -lntp命令来查找监听在端口80上的程序等。通常,定位二进制文件是一个有用的指示器,可以指向包含配置文件的目录树。