zoukankan      html  css  js  c++  java
  • Linux WebServer WebRoot Path Identification

    目录

    1. HTTPD(Apache)
    2. NGINX
    3. TENGINE
    4. JBOSS
    5. TOMCAT
    6. LIGHTTPD

    1. HTTPD(Apache)

    0x1: 启动参数

    Usage: ./httpd [-D name] [-d directory] [-f file]
                   [-C "directive"] [-c "directive"]
                   [-k start|restart|graceful|graceful-stop|stop]
                   [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]
    Options:
    1. -D name            
    define a name for use in <IfDefine name> directives,它配合配置文件中的<IfDefine>段,用于在服务器启动和重新启动时,有条件地跳过或处理某些命令
    
    2. -d directory  
    specify an alternate initial ServerRoot,为ServerRoot指令设置初始值为serverroot。它可以被配置文件中的ServerRoot指令所覆盖,其默认值是/usr/local/apache2
    
    3. -f file           
    specify an alternate ServerConfigFile,在启动中使用config文件的指令。如果config不是以/开头的文件名, 则它是相对于ServerRoot的一个路径。其默认值是conf/httpd.conf 
    
    4. -C "directive"     
    process directive before reading config files,在读取配置文件之前,先处理directive的配置
    
    5. -c "directive"    
    process directive after reading config files,在读取配置文件之后,再处理directive的配置
    
    6. -e level  
    show startup errors of level (see LogLevel),在服务器启动时,设置LogLevel为level。它用于在启动时,临时增加出错信息的详细程度,以帮助排错
    
    7. -E file        
    log startup errors to file,将服务器启动过程中的出错信息发送到文件file
    
    8. -v              
    show version number,显示httpd的版本,然后退出
    
    9. -V               
    show compile settings,显示httpd的版本和编译参数, 然后退出
    
    10. -h                
    list available command line options (this page),输出一个可用的命令行选项的简要说明
    
    11. -l                
    list compiled in modules,输出一个编译在服务器中的模块的列表。它不会列出使用LoadModule指令动态加载的模块
    
    12. -L                 
    list available configuration directives,输出一个指令的列表,并包含了各指令的有效参数和使用区域
    
    13. -t -D DUMP_VHOSTS 
    show parsed settings (currently only vhost settings),仅对配置文件执行语法检查。程序在语法解析检查结束后立即退出,或者返回0(Syntax OK),或责返回非0的值(Syntax Error)。如果还指定了-D DUMP_VHOSTS ,会显示虚拟主机配置的详细信息
    
    14. -S               
    a synonym for -t -D DUMP_VHOSTS,显示从配置文件中读取并解析的设置结果(目前仅显示虚拟主机的设置)
    
    15. -t -D DUMP_MODULES
    show all loaded modules
    
    16. -M            
    a synonym for -t -D DUMP_MODULES
    
    17. -t                
    run syntax check for config files,仅对配置文件执行语法检查。程序在语法解析检查结束后立即退出,或者返回0(Syntax OK),或责返回非0的值(Syntax Error)

    0x2: WebRoot识别伪代码

    1. 枚举当前进程列表信息: 枚举/proc
        1) 进程对应的文件绝对路径: /proc/pid/exe
        2) 进程启动参数: /proc/pid/cmdline
    2. 确定webserver类型: 根据进程名进行判断
    3. 从进程的启动参数中获取配置文件的相关信息
        1) -f config
        2) -d ServerRoot
    4. 如果"-f config"配置文件参数字符串没找到,则/proc/pid/exe -V动态运行一次,显示编译信息
        1) -D HTTPD_ROOT="/opt/apache": 表明webroot路径
        2) -D SERVER_CONFIG_FILE="conf/httpd.conf": 表明配置文件相对路径
    5. 如果"-d ServerRoot"web路径参数字符串没找到,则根据"/proc/pid/exe"去掉路径中的最后2个分量,作为webserver的根目录,并拼接上"/conf/httpd.conf"作为配置文件路径
    /*根据获取的配置文件路径,进行配置文件解析*/
    6. 解析配置文件,从中获得webroot的配置信息
        1) ServerRoot "/opt/apache"
        2) DocumentRoot(web文件路径) "/usr/web"
        3) Include conf/vhosts/*/*.conf: 配置文件中又引入了新的配置文件,进行递归解析
        4) Alias /icons/ /usr/local/apache/icons/: 配置中出现的别名目录

    Relevant Link:

    http://httpd.apache.org/docs/2.2/mod/mod_alias.html#alias
    http://httpd.apache.org/docs/current/mod/core.html#serveralias

    2. NGINX

    0x1: 启动参数

    Tengine version: Tengine/2.1.0 (nginx/1.6.2)
    Usage: nginx [-?hvmVtdq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    Options:
    1. -?,-h        
    this help
    
    2. -v            
    show version and exit,显示 nginx 的版本
    
    3. -V 
    show version, modules and configure options then exit,显示 nginx 的版本,编译器版本和配置参数
    
    4. -m            
    show all modules and exit
    
    5. -l           
    show all directives and exit
    
    6. -t            
    test configuration and exit
    
    7. -d            
    dump configuration and exit,打印配置文件信息
      
    8. -q       
    suppress non-error messages during configuration testing
    
    9. -s signal    
    send signal to a master process
        1) stop
        2) quit
        3) reopen
        4) reload
    可以使用信号系统来控制主进程,主进程可以处理以下的信号
        1) TERM、INT:    快速关闭
        2) QUIT:    从容关闭
        3) HUP:        重载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程
        4) USR1:    重新打开日志文件
        5) USR2:    平滑升级可执行程序
        6) WINCH:    从容关闭工作进程
    
    10. -p prefix    
    set prefix path (default: /usr/local/nginx/)
    
    11. -c filename  
    set configuration file (default: conf/nginx.conf)
    
    12. -g directives : set global directives out of configuration file

    0x2: WebRoot识别伪代码

    1. 枚举当前进程列表信息: 枚举/proc
        1) 进程对应的文件绝对路径: /proc/pid/exe
        2) 进程启动参数: /proc/pid/cmdline
    2. 确定webserver类型: 根据进程名进行判断
    3. 从进程的启动参数中获取配置文件的相关信息
        1) -c </path/to/config>
        2) -p prefix
    4. 如果"-p prefix"前缀配置参数字符串没找到,则根据"/proc/pid/exe"+"/conf/nginx.conf"进行拼接,作为配置文件路径
    
    5. 如果在NGINX启动参数中没找到和配置文件有关的字符串,则/proc/pid/exe -d动态运行一次,打印出整个配置文件信息 
    ....
    6. 解析配置文件,从中获得webroot的配置信息
        1) http: 
            1.1) 在http节点中搜索root关键字
            1.2) 对include关键字进行检测,对引入的独立配置文件路径进行递归解析
        2) server: 
            2.1) 在server节点中搜索root关键字
            2.2) 对include关键字进行检测,对引入的独立配置文件路径进行递归解析
        3) location(以.php$结尾的location节点)
            3.1) 解析FastCgi节点
                3.1.1) 搜索root关键字
                3.1.2) 解析fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name
                3.1.3) 解析$document_root
            3.2) 搜索root关键字
            3.3) location ~ ^/users/(.+.(?:gif|jpe?g|png))$ { alias /data/w3/images/$1;}: 配置中出现的别名目录 

    Relevant Link:

    http://www.nginx.cn/nginxchscommandline
    http://wiki.nginx.org/ChsCommandLine
    http://wiki.nginx.org/FullExample
    http://www.ha97.com/5194.html
    http://nginx.org/cn/docs/http/ngx_http_core_module.html#alias
    http://www.886404.com/search?q=NGINX+%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6+Alias
    http://wiki.nginx.org/ChsCommandLine

    3. TENGINE

    4. JBOSS

    0x1: 启动参数

    usage: run.sh [options] 
    
    options: 
    1. -h、--help    
    显示帮助信息
    
    2. -V、--version
    显示版本信息
     
    3. -D<name>[=<value>]            
    设置系统属性,JBoss Bootstrap Environment 
        1) JBOSS_HOME: /usr/java/jboss4 
        2) JAVA: /usr/java/j2sdk/bin/java 
        3) JAVA_OPTS: -Dprogram.name=run.sh -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 
        4) CLASSPATH: /usr/java/jboss4/bin/run.jar:/usr/java/j2sdk/lib/tools.jar 
    
    4. -d、--bootdir=<dir>
    设置启动补丁目录的位置;必须是绝对路径或者url
    
    5. -p、--patchdir=<dir>
    设置补丁目录的位置,必须是绝对路径或者url
    
    6. -n、--netboot=<url>
    从指定的url网络位置启动
    
    7. -c、--configuration=<name>
    指定服务器启动的配置(default、all、minimal)
    
    8. -B、--bootlib=<filename>
    将其它的jar包添加到bootclasspath的前面
    
    9. -L、--library=<filename>
    将其它的jar包添加到loaders classpath
    
    10. -C、--classpath=<url>
    将其它的url添加到loaders classpath
    
    11. -P、--properties=<url>
    从指定的url加载系统属性
    
    12. -b、--host=<host or ip>
    所有JBoss Service绑定的地址
    
    13. -g、--partition=<name>
    HA分区的名称(缺省为DefaultDomain)
    
    14. -u、--udp=<ip>
    UDP的多播地址
    
    15. -l、--log=<log4j|jdk>
    设置日志记录插件类型

    0x2: WebRoot识别伪代码

    1. 枚举当前进程列表信息: 枚举/proc
        1) 进程对应的文件绝对路径: /proc/pid/exe
        2) 进程启动参数: /proc/pid/cmdline
    2. 确定webserver类型: 根据进程名进行判断
    3. 从进程的启动参数中获取WEB根目录
        1) -Djboss.home.dir=: 从设置的系统属性中提取WEB根目录
        2) -Djava.endorsed.dirs=: 从设置的系统属性中提取WEB根目录
    //启动参数中获取的就已经是WEB根目录了

    Relevant Link:

    http://blog.csdn.net/icess_ma/article/details/1958363 
    http://wenku.baidu.com/link?url=zxv-P-A2VDHEGsuJY_IcdaMpsRYLGa7be9d4EaQeyMZUnbHHY62KzbTDCe3ux074KN-bvE8kUDmBOFvJ9v3cR5HK1ynAoByfISwmMpTCJFa

    5. TOMCAT

    0x1: 启动参数

    Tomcat的启动参数位于tomcat的安装目录in目录下,Linux操作系统就是catalina.sh文件,Windows操作系统就是catalina.bat文件

    1. -server
    一定要作为第一个参数,在多个CPU时性能佳 
    
    2. -Xms
    初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 
    3. -Xmx
    java heap最大值,使用的最大内存 
    //上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半
    
    4. -XX:PermSize
    设定内存的永久保存区域 
    
    5. -XX:MaxPermSize
    设定最大内存的永久保存区域 
    
    6. -XX:MaxNewSize
    
    7. -Xss 15120 
    这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值是512k
     
    8. +XX:AggressiveHeap 
    会使得Xms没有意义。这个参数让jvm忽略Xmx参数,最大程度地消耗一个G物理内存、以及一个G的swap
    
    9. -Xss:
    每个线程的Stack大小 
    
    10. -verbose:gc 
    开启垃圾收集信息 
    
    11. -Xloggc:gc.log 
    指定垃圾收集日志文件 
    
    12. -Xmn
    young generation的heap大小,一般设置为Xmx的3、4分之一 
    
    13. -XX:+UseParNewGC
    缩短minor收集的时间 
    
    14. -XX:+UseConcMarkSweepGC
    缩短major收集的时间,此选项在Heap Size比较大而且Major收集时间较长的情况下使用更合适
    
    15. -Dcatalina.home="C:ApacheGroupTomcat 5.0"  
    HOME目录
    
    16. -Djava.endorsed.dirs="C:ApacheGroupTomcat 5.0commonendorsed"
    ENDORSED目录

    0x2: WebRoot识别伪代码

    1. 枚举当前进程列表信息: 枚举/proc
        1) 进程对应的文件绝对路径: /proc/pid/exe
        2) 进程启动参数: /proc/pid/cmdline
    2. 确定webserver类型: 根据进程名进行判断
    3. 从进程的启动参数中获取配置文件的相关信息
        1) -Dcatalina.home=  
    4. 如果在NGINX启动参数中没找到和配置文件有关的字符串,则/proc/pid/exe+"/conf/server.xml"拼接出tomcat的默认配置文件路径
    ....
    5. 解析配置文件,从中获得webroot的配置信息,这是一个xml文件,需要进行层次解析
    Server -> Service -> Engine -> Host(循环遍历所有Host节点) -> 属性appBase对应的值/或者属性docBase对应的值就是对应的WEB ROOT路径

    Relevant Link:

    http://wenku.baidu.com/view/fa4f0118964bcf84b9d57b06.html
    http://blog.csdn.net/huoyunshen88/article/details/8731937
    http://blog.csdn.net/lifetragedy/article/details/7708724

    6. LIGHTTPD

    0x1: 启动参数

    lighttpd/1.4.35 (ssl) (Mar 12 2014 17:15:15) - a light and fast webserver
    usage:
    1. -f <name>  
    filename of the config-file
    
    2. -m <name>  
    module directory (default: /usr/lib64/lighttpd)
    
    3. -p
    print the parsed config-file in internal form, and exit
    
    4. -t  
    test the config-file, and exit
    
    5. -D         
    don't go to background (default: go to background)
    
    6. -v
    show version
    
    7. -V         
    show compile-time features
    
    8. -h
    show this help

    0x2: WebRoot识别伪代码

    1. 枚举当前进程列表信息: 枚举/proc
        1) 进程对应的文件绝对路径: /proc/pid/exe
        2) 进程启动参数: /proc/pid/cmdline
    2. 确定webserver类型: 根据进程名进行判断
    3. 从进程的启动参数中获取配置文件的相关信息
        1) -f config 
    4. 如果"-d ServerRoot"web路径参数字符串没找到,则根据"/proc/pid/exe"去掉路径中的最后2个分量,作为webserver的根目录,并拼接上"conf/lighttpd.conf"作为配置文件路径
    /*根据获取的配置文件路径,进行配置文件解析*/
    5. 解析配置文件,从中获得webroot的配置信息
        1) server.document-root = server_root + "/lighttpd": 进行变量回溯解析,获取WEB根目录 
        2) include "conf.d/access_log.conf": 配置文件中又引入了新的配置文件,进行递归解析 
        //lighttpd 不支持include * 通配符路径 和 entiry directory

    Relevant Link:

    http://linux.chinaunix.net/techdoc/net/2009/06/18/1119096.shtml

    Copyright (c) 2014 LittleHann All rights reserved

  • 相关阅读:
    lc377完全背包问题
    lc650
    lc583
    java static序列化
    lc90回溯
    lc78回溯
    Java基础之常量池
    语法与语义
    数据结构之复杂度分析
    数据结构与算法前言
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4314538.html
Copyright © 2011-2022 走看看