目錄
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的安裝目錄\bin目錄下,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:\ApacheGroup\Tomcat 5.0" HOME目錄 16. -Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed" 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