1. 程式人生 > >Apache網站服務

Apache網站服務

正則表達 links 信息 path 特定 url對應 bit 編譯 maximum

Apache 下載地址: http://mirror.bit.edu.cn/apache/httpd/
相關軟件下載地址:http://mirror.bjtu.edu.cn/apache/apr/apr
         http://mirror.bjtu.edu.cn/apache/apr/apr-util
=============Apache 簡介: 進程技術,高資源消耗,但是穩定;

技術分享

技術分享

MPM (multi process moudles): 多處理模塊;
   Apache工作模式:
    進程池(prefork):適合動態頁面,總是提前準備好進程等待訪問者,一個進程對應一個web訪問請求;
    線程池(worker,event):適合靜態頁面,比如先開啟5個進程,每個進程裏開啟100線程,一個線程接待一個web訪問請求;

技術分享

httpd------->prefork ---->默認
     httpd.worker------->worker
     httpd.event-------->event
    如果使用簡化安裝的Apache,如何改變它的MPM工作模式?

技術分享

=================LAMP平臺概述:

技術分享

=========Apache中的進程與線程:

技術分享

1》安裝Apache軟件:
    rpm 和 yum 安裝:
  1> yum install httpd
    service httpd restart

技術分享

啟動服務的腳本------》運行/usr/sbin/httpd----》調用/etc/httpd/conf/ httpd.conf;

技術分享

真正提供httpd服務的程序的名字;

2>源碼安裝:
      ==下載軟件包:
        http://mirror.bit.edu.cn/apache/httpd/
        http://mirror.bjtu.edu.cn/apache/apr/apr
        http://mirror.bjtu.edu.cn/apache/apr/apr-util

      ==安裝軟件:
        yum -y install gcc autoconf automake make pcre pcre-devel openssl openssl-devel

apr:
      ./configure
      make && make install
    apr-util:
      ./configure --with-apr=/usr/local/apr
      make && make install
    httpd:
    ./configure --prefix=/usr/local/apache --enable-so --enable-ssl --enable-rewrite --with-mpm=worker --with-suexec-bin --with-apr=/usr/local/apr
    make && make install
    可以通過./configure --help 命令來查看腳本支持的所有選項:
      --prefix 指定Apache httpd程序的安裝主目錄
      --enable-so 開啟模塊化功能,支持DSO(動態共享對象)
      --enable-ssl 支持SSL加密
      --enable-rewrite 支持地址重寫
      --with-mpm 設置Apache 工作模式
      --with-suexec-bin 支持SUID,SGID
      --with-apr 指定apr程序絕對路徑

2》修改配置文件:
  主配置文件:/etc/httpd/conf/httpd.conf:
  簡單配置:

技術分享

出現上述提示說明沒有標準的域名,需要指定:
   ServerName:www.chw.com:80 -----276行》打開配置,去掉註釋,然後修改;

配置文件詳情解析:Apache服務的主配置文件主要由指令以及容器組成,容器使用<容器名稱>開始,以</容器名稱>結尾,容器的指令一般僅在容器內有效:
    1>SeverRoot指令:
      設置軟件的安裝主目錄,如果采用源碼安裝,則默認路徑為/usr/local/apache2;
    2>Listen指令:
       設置服務器監聽的IP以及端口號,默認監聽服務器本機所有的IP地址的80端口,語法格式為:Listen[IP地址:]端口[協議],其中IP地址與協議為可選項, 默認監聽所有的IP ,使用TCP協議,一個配置文件可以多次使用Listen指令來開啟多個端口;
    3>LoadModule指令:
      如果希望Apache動態加載模塊,需要在編譯Apache時通過enable-so將mod_so以靜態方式編譯到Apache核心模塊中,此指令的作用就是加載模塊,語法 格式為:LoadModule 模塊 模塊文件名稱,其中模塊文件一般位於ServerRoot目錄下的modules目錄中;
    4>LoadFile指令:
      功能類似於上述指令,區別在於後者可以通過絕對路徑加載modules目錄下的模塊文件;

5>ServerAdmin指令:
       當網站出現故障時,需要為客戶提供一個可以幫助解決問題的郵件地址,ServerAdmin指令的作用就是提供這樣的郵件地址;
    6>ServerName指令:
       設置服務器本機的主機名稱以及端口,對URL地址的重定向很重要;
    7>DocumentRoot指令:
        設置WEB服務隊客戶端開放可見的文檔根目錄,也就是客戶端訪問網站的根目錄;
    8>ErrorLog指令:
       定位服務器錯誤日誌的位置,默認使用相對路徑;
    9>ErrorLogFormat指令:
        設置錯誤日誌的格式;
    10>CustomLog指令:
       設置客戶端的訪問日誌文件名以及日誌格式,格式為:CustomLog 文件名 格式;
    11>LogFormat指令:
       描述用戶日誌文件格式,一般我們會為此指令設置的日誌格式創建別名,然後通過CustomLog指令調用該日誌格式別名;

12>Include指令:
       允許Apache在主配置文件中加載其他的配置文件;
    13>Options指令:
       為特定目錄設置選項,選項可以設置為None,代表不啟用任何額外的功能,也可以使用如下常用選項:
        All:開啟除MultiViews之外的所有選項;
        ExecCGI:允許執行Options指定目錄下的所有CGI腳本;
        FollowSymlinks:允許Options指定目錄下的文件鏈接到目錄外的文件或目錄;
        Indexes:如果與URL對應的Options目錄下找不到DirectoryIndex指定的首頁文檔,則服務器將會把當前目錄的所有文件索引出來;
    14>Order指令:
        控制默認訪問狀態以及Allow與Deny的次序,如果使用Order deny,allow,則先檢查拒絕,再檢查允許,當拒絕與允許有沖突時,允許優先,默認規則為 允許;如果使用Order allow ,deny,則先檢查允許,再檢查拒絕,當允許與拒絕有沖突時,拒絕優先,默認規則為拒絕;

具體案例:
          Order deny,allow
          Deny from all 拒絕所有;

          Order Allow,Deny
          allow from all 允許所有;

          Order Allow,Deny
          allow from 192.168.1.2 除此IP外拒絕所有;

          Order Allow,Deny
          allow from 192.168.1.2
          Deny from All 拒絕所有人訪問;

          Order Deny,Allow
          Deny from all
          allow from 192.168.1.2 除此IP外拒絕所有;

15>IfDefine容器:
          此容器封裝的指令僅在啟動Apache時測試條件為真才會被處理,測試條件需要在啟動Apache時通過-D定義:
        實例:
          service httpd -D UseCache -D MemCache restart

        <IfDefine MemCache>
          LoadModule mem_cache_module modules/mod_mem_cache.so
        </IfDefine>

        <IfDefine UseCache>
          LoadModule cache_module modules/mod_cache.so
        </IfDefine>

16>IfModule容器:
        此容器封裝僅在條件滿足時才會處理的指令,根據指定的模塊是否已被加載來決定條件是否滿足;
      案例:
        <IfModule unixd_module>
        User daemon
        Group daemon
        </IfModule>
     17>Directory容器:
        該容器內 指令僅應用於特定的文件系統目錄,子目錄以及目錄下的內容;
     18><DirectoryMatch>
        此指令類似於上述指令,但可以直接使用正則表達式匹配,無須使用~符號;
     19>Files容器:
        容器內的指令僅應用於特定的文件,它可以使用~匹配正則表達式;
     20>FilesMatch容器:
        僅使用正則表達式匹配需要的文件,;
     21>Location容器:
        容器內定義的指令僅對特定的URL有效,語法格式為:<Location URL-path|URL> </Location>,如果需要使用正則表達式,可以用~符號來匹配;

22>LocationMathch容器和VirtualHost容器:
        僅使用正則表達式來匹配URL,等同於使用了~符號匹配的Location;

=============虛擬主機應用案例:
    虛擬主機是在一臺服務器上同時運行多個WEB業務,Apache服務支持基於域名以及基於IP的虛擬主機類型,但是更多時候我們更喜歡基於域名的虛擬主機,服務器可以根據客戶端訪問HTTTP的頭部信息來實現網站的分離解析,客戶端可以使用不同的域名訪問位於同一IP地址的服務器資源;

1》修改主配置文件:
    將主配置文件中的Include conf/extra/httpd-vhosts.conf語句開啟,Include指令將會讀取次配置文件的內容作為主配置文件的一部分,並且兩個虛擬主機的端口 也應該不同,所以主配置文件應該監聽兩個端口;

技術分享

2》修改次配置文件:

技術分享

3》為兩個不同的虛擬主機創建各自的頁面根目錄:
    當訪問這兩個網站時,如果沒有合法的DNS服務器,可以通過修改hosts文件來進行域名解析,如果需要進行基於IP 地址的虛擬主機,只需將*修改為固定的IP地址即可,多個虛擬主機需要使用多個VirtualHost封裝;

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
當上述的數值賦值不當時,刷新服務時的提醒?

技術分享

*******註意:
linux內核默認情況下一個進程可以打開的文件的數量是1024;

技術分享

可以使用命令來修改這個值:
    ulimit -n 25535 只能暫時有效;
    默認情況下Apache編譯進來了哪些模塊:

技術分享

3》啟動服務,配置防火墻規則或關閉防火墻:
    service httpd restart
    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    service iptables save

Apache網站服務