假设我有一个由Jetty或Apache托管的目录(我想要两者的答案),我知道URL包括端口,我可以登录到服务器。
如何找到某个端口托管的目录?
我也想走另一条路,我在服务器上有一个文件夹,我知道如果托管,但我不知道端口,所以我无法在网络浏览器中找到它。 / p>
如何查找正在托管的目录列表?
这已经困扰了我多年,但我以前从未打扰过这个问题!
感谢。
答案 0 :(得分:2)
这是如何为Apache找到它的方法。假设您有一个网址http://myserver.de:8081/somepath/index.html
您可以通过在服务器的shell中使用lsof来执行此操作,该shell列出了打开的文件(和端口)以及与之关联的进程:
myserver:~ # lsof -i -P | grep LISTEN | grep :80
apache2 17479 root 4u IPv6 6271473 TCP *:80 (LISTEN)
我们现在知道有一个名为“apache2”的进程,进程号为17479
我们现在可以查看流程的环境,其中应提供更多信息:
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
我们之前的检查表明,在命令行中没有给出带-f选项的特殊配置文件,因此我们必须找到该进程的默认位置。这取决于如何将默认命令行编译到apache2可执行文件中。这可以以某种方式从中提取,但显然它是我机器上的Apache 2的默认位置(Debian Etch),即/etc/apache2/apache2.conf。
这又需要一些关于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文件,其中包含描述这些网站的行。在那里你可以找到目录。