OB2D主機架設

7. Apache的設定及優化

開啟Apache狀態功能

  1. 先啟用狀態模組(其他模組就順便啟用)
    a2enmod mod_status rewrite
  2. 修改設定檔
    vi /etc/apache2/mods-enabled/status.conf
  3. 加入可以觀看態結果的網域
    <Location /server-status>
            SetHandler server-status
            Require local
            Require ip 120.115.3.0/24
    </Location>
    
  4. 最後重新啟動Apache
    systemctl restart apache2
  5. 執行(每10秒自動更新)
    http://網址/server-status?refresh=10

放大限制(主機多的時候)

  1. 編輯設定檔
    vi /etc/apache2/envvars

    把其中limit的註解取消

    APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

    重啟網站

減少主機資訊外漏

  1. 網站資訊檢測:https://www.netcraft.com/
  2. 編輯 /etc/apache2/conf-enabled/security.conf
    vi /etc/apache2/conf-enabled/security.conf
  3. 找出底下兩個設定項目,並修改其值

    ServerTokens Prod
    ServerSignature Off
    
  4. 重啟網站

    service apache2 restart

Apache常用指令

  1. 計算 Apache2 總記憶體使用量
    ps aux | grep apache2 | awk '{ total += $6; } END { print total/1024"MB" }'
  2. 計算 Apache2 總 CPU 使用量
    ps aux | grep apache2 | awk '{ total += $3; } END { print total"%" }'
  3. 要查看當前正在運行的Apache進程數(processes),請使用此命令
    ps faux|grep apache2|wc -l
  4. 查看在所有進程下運行的Apache線程總數(threads), MaxRequestWorkers的設定值需大於此值
    ps -eLf|grep apache2|wc -l
  5. 查看在特定Apache進程(processes)下運行的線程數(threads)
    ps -eLf|grep $程序編號 |wc -l
  6. 查看當前的連接數狀況:
    netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
  7. linux下獲取佔用CPU資源最多的10個進程,可以使用如下命令組合:
    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
  8. linux下獲取佔用內存資源最多的10個進程,可以使用如下命令組合:
    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
  9. 列出系統上最耗費記憶體的程式:
    ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
  10. 前 10 個最耗費記憶體的行程:
    top -b -o +%MEM | head -n 17
  11. 找出最耗費 CPU 資源的行程 :
    top -b -o +%CPU | head -n 17
  12. 查看和Apache相關的連線
    netstat -ae|grep www-data
  13. 可用以下指令查看目前連線數最高的IP
    netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n

查看Apache2使用模式

  1. 先查看一下Apache 資訊
    apache2 -V
  2. 若出現類似以下訊息:

    [Mon Oct 16 22:34:47.936456 2017] [core:warn] [pid 9405] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
    apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot
  3. 則執行以下指令,重新匯入Apache環境變數:

    . /etc/apache2/envvars
  4. 接者再執行原本指令,應該就會看到正確信息,如:

    Server version: Apache/2.4.25 (Debian)
    Server built:   2017-09-19T18:58:57
    Server's Module Magic Number: 20120211:68
    Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
    Compiled using: APR 1.5.2, APR-UTIL 1.5.4
    Architecture:   64-bit
    Server MPM:     prefork
      threaded:     no
        forked:     yes (variable process count)
    Server compiled with....
     -D APR_HAS_SENDFILE
     -D APR_HAS_MMAP
     -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
     -D APR_USE_SYSVSEM_SERIALIZE
     -D APR_USE_PTHREAD_SERIALIZE
     -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
     -D APR_HAS_OTHER_CHILD
     -D AP_HAVE_RELIABLE_PIPED_LOGS
     -D DYNAMIC_MODULE_LIMIT=256
     -D HTTPD_ROOT="/etc/apache2"
     -D SUEXEC_BIN="/usr/lib/apache2/suexec"
     -D DEFAULT_PIDLOG="/var/run/apache2.pid"
     -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
     -D DEFAULT_ERRORLOG="logs/error_log"
     -D AP_TYPES_CONFIG_FILE="mime.types"
     -D SERVER_CONFIG_FILE="apache2.conf"
    
  5. 從第7行可以得知,目前跑的是 prefork 模式。因此,開啟對應設定檔編輯之:

    vi /etc/apache2/mods-available/mpm_prefork.conf
  6. 完整說明請參考:http://www.cnblogs.com/kevingrace/p/6211887.html