Apache網站服務
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網站服務