查找托管目录Jetty / Apache

时间:2010-05-05 08:25:29

标签: linux apache jetty

假设我有一个由Jetty或Apache托管的目录(我想要两者的答案),我知道URL包括端口,我可以登录到服务器。

如何找到某个端口托管的目录?

我也想走另一条路,我在服务器上有一个文件夹,我知道如果托管,但我不知道端口,所以我无法在网络浏览器中找到它。 / p>

如何查找正在托管的目录列表?

这已经困扰了我多年,但我以前从未打扰过这个问题!

感谢。

3 个答案:

答案 0 :(得分:2)

这是如何为Apache找到它的方法。假设您有一个网址http://myserver.de:8081/somepath/index.html

步骤1:找到打开给定端口的进程

您可以通过在服务器的shell中使用lsof来执行此操作,该shell列出了打开的文件(和端口)以及与之关联的进程:

myserver:~ # lsof -i -P | grep LISTEN | grep :80
apache2   17479        root    4u  IPv6 6271473       TCP *:80 (LISTEN)

我们现在知道有一个名为“apache2”的进程,进程号为17479

第2步:了解有关流程的更多信息

我们现在可以查看流程的环境,其中应提供更多信息:

myserver:~ # (cat /proc/17479/environ; echo) | tr "\000" "\n"
PATH=/usr/local/bin:/usr/bin:/bin
PWD=/
LANG=C
SHLVL=1
_=/usr/sbin/apache2

Okey,进程可执行文件是/ usr / sbin / apache2。现在让我们看一下命令行。

myserver:~ # (cat /proc/17479/cmdline; echo) | tr "\000" " "
/usr/sbin/apache2 -k start

第3步:查找流程的配置

我们之前的检查表明,在命令行中没有给出带-f选项的特殊配置文件,因此我们必须找到该进程的默认位置。这取决于如何将默认命令行编译到apache2可执行文件中。这可以以某种方式从中提取,但显然它是我机器上的Apache 2的默认位置(Debian Etch),即/etc/apache2/apache2.conf。

第4步:检查Apache配置文件

这又需要一些关于apache配置的知识。配置文件可以包含其他文件,因此我们需要先找到它们:

myserver:~# cat /etc/apache2/apache2.conf | grep -i ^Include
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/
Include /etc/apache2/sites-enabled/

一个不错的清单。这些配置告诉您有关配置的一些信息,并且有许多选项可能会将文件映射到URL。特别是apache可以为不同的域提供不同的目录,如果这些域都映射到同一个IP。因此,假设在您的服务器上托管了一大堆域,然后“myserver.de”由默认配置或专门为此域提供服务的配置映射。

最重要的指令是DocumentRoot,Alias和Redirect。在我的系统中,下面给出了一个快速概述(注释省略):

myserver:~# ( cat /etc/apache2/apache2.conf; cat /etc/apache2/sites-enabled/* ) | grep 'DocumentRoot\|Alias\|Redirect'
    Alias /icons/ "/usr/share/apache2/icons/"
        DocumentRoot /var/www/
                RedirectMatch ^/$ /apache2-default/
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    Alias /doc/ "/usr/share/doc/"
        DocumentRoot /var/www/
                RedirectMatch ^/$ /apache2-default/
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    Alias /doc/ "/usr/share/doc/"

由于URL的“mypath”部分没有直接匹配,我可以节省地假设它位于DocumentRoot / var / www /之下,因此我搜索的结果是

http://myserver.de:8081/somepath/index.html --> /var/www/mypath/index.html

您可以以类似的方式为jetty执行查找。

答案 1 :(得分:1)

作为惯例,您可以维护一份文档,详细说明所有文件系统目录和创建的相应URL。这将是文件> URL和URL->文件映射的一部分,对规划,资源管理和安全评审也很有用。

以下是值得深思的,而不是任何严肃的建议。我的“正确”答案是使用好的文档。然而...

可能采用自动化方法。自由思考(不一定是实际的!)你可以找到/创建一个Apache模块/ jetty扩展,在每个web目录中添加一个小的虚拟文件,因为它是从文件系统提供的。该虚拟文件的内容将包含服务器所在服务器上的目录位置,以及内部服务器名称,IP或其他详细信息,以帮助缩小与您在Web端看到的内容之间的差距以及它的位置在您的Intranet中。

将文件映射到URL非常棘手。您可以通过扫描http访问日志来自动化它,http日志配置了自定义记录器,该记录器在提供文件时记录条目。通过扫描访问的URL和提供的相应文件,您可以将文件映射回URL。 (如果您不想按照上面段落中的描述手动浏览URL,您还可以获得URL->文件映射。)

答案 2 :(得分:0)

apache2ctl -S

或(对于旧计算机):

apachectl -S

您将看到vhosts文件,其中包含描述这些网站的行。在那里你可以找到目录。