httpd是Apache超文本傳輸協議(HTTP)服務器的主程序,直接執行程序便可啓動該服務。php
httpd html
-h可查看命令選項web
-M查看靜態編譯及動態裝載的模塊(動態模塊加載:不需重啓即生效)apache
-c<httpd指令> 在讀取配置文件前,先執行選項中的指令。vim
-C<httpd指令> 在讀取配置文件後,再執行選項中的指令。centos
-d<服務器根目錄> 指定服務器的根目錄。安全
-D<設定文件參數> 指定要傳入配置文件的參數。服務器
-f<設定文件> 指定配置文件。併發
-l 顯示服務器編譯時所包含的模塊。app
-L 顯示httpd指令的說明。
-S 顯示配置文件中的設定。
-t 測試配置文件的語法是否正確。
-v 顯示版本信息。
-V 顯示版本信息以及創建環境。
-X 以單一程序的方式來啓動服務器
httpd服務配置文件模塊化,以便於管理
主配置文件 /etc/httpd/conf/httpd.conf
其餘配置文件 /etc/httpd/conf.d/*.conf
檢測配置文件語法:
httpd -t
service httpd configtest
/etc/httpd/conf/httpd.conf爲httpd服務的主配置文件,其配置內容以下
serverroot 「/etc/httpd」 //相對路徑的根,指定apache的運行目錄 listen 80 //套接字,默認省略ip,表示監聽本機全部ip的80端口(添加套接字只需從新再寫一行) user apache //以Apache用戶(普通用戶)運行httpd的工做進程(下降權限增長安全性) group apache //Apache子進程運行時的用戶組 ServerName www.example.com:80 //指定主機名(dns解析的主機名,一個標識,沒有特殊意義) Include conf.modules.d/ *.conf //包含conf.modules.d/ *.conf爲子配置文件 DocumentRoot "/var/www/html" //網頁文件存放的目錄,同時也是URL路徑的起始位置 <Directory [目錄]> //對目錄的具體權限設置,對目錄進行的配置,對當前目錄及其子目錄生效 AllowOverride none Require all de1nied //控制訪問,經過網頁對全部人拒絕訪問此目錄 /*關於Require Require是對訪問用戶進行限制的參數,Require 能夠指定ip,host,如有用戶也能夠指定可訪問的用戶 Require all denied 全部人不可訪問 Require all granted 全部人可訪問 Require ip [ip] 能夠指定可訪問的ip(172.20) Require not ip [ip] 可指定不可訪問的ip 當有多個require時須要用黑名單或白名單 白名單: <RequireAny> //標籤內爲可訪問的ip Require all denied Require ip [ip1] Require ip [ip2] </RequireAny> 黑名單: <RequireAll> //標籤內爲不可訪問的ip Require all granted Require not ip 192.168.1.1 </RequireAll> */ Options Indexes FollowSymLinks /*關於Options Options爲是否開啓額外特性,不開啓任何特性爲None,在添加屬性時若直接加屬性名則爲只使用該屬性,屬性之間使用空格符隔開,若寫爲「+Indexes」這樣的格式,則爲在其父目錄的屬性基礎上再加上此屬性 ALL 開啓MultiViews以外的全部特性,默認屬性 Indexes 開啓後訪問的目錄下若是沒有index.html,index.php,則會將目錄下的文件名列出,非下載站點不建議開啓 FollowSymLinks 開啓後可訪問目錄下軟鏈接,不安全不建議開啓 ExecCGI 開啓後容許使用mod_cgi執行CGI腳本 Includes 開啓後容許使用mod_include提供的服務器端包含 MultiViews 開啓後容許使用多重視圖,但影響服務器性能不建議開啓 */ ErrorLog "logs/error_log" //定義錯誤日誌路徑 LogLevel warn //定義錯誤日誌等級 LogFormat 「...」 //定義日誌格式 CustomLog "logs/access_log" combined //定義訪問日誌路徑和日誌格式,combined爲一種日誌格式 DirectoryIndex index.html //默認主頁 </Directory>
/etc/httpd/conf.modules.d/爲其模塊配置文件
/etc/httpd/conf.modules.d/00-mpm.conf //爲多路處理模塊配置,文件改動後,重啓服務生效,對模塊中參數的改動直接寫在對應模塊下便可
指定加載模塊 模塊名稱 模塊路徑
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
//prefork模塊 事先生成多個空閒進程以等待處理用戶請求,一個進程響應一個請求(提早生成空閒進程以使用戶請求時無需現生成進程,減小用戶等待時間)系統的默認模塊,也是最穩定的模塊
配置參數直接寫在對應模塊下便可(如下是默認參數)
StartServers 5 //啓動服務時開啓子進程數
MinSpareServers 5 //最小空閒進程數
MaxSpareServers 10 //最大空閒進程數
MaxRequestWorkers 256 //最多的併發請求數
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
//worker模塊 一個主進程生成m個子進程,而後每一個子進程生成n個線程,因此能夠有m*n個併發線程,一個線程響應一個請求
配置參數直接寫在對應模塊下便可(如下是默認參數)
ServerLimit 16 //最大的進程數
StartServers 3 //啓動服務時開啓子進程數
MaxRequestWorkers 150 //最多的併發請求數
MinSpareThreads 25 //最少空閒的線程數
MaxSpareThreads 75 //最多空閒的線程數
ThreadsPerChild 25 //每一個子進程的線程數
#LoadModule mpm_event_module modules/mod_mpm_event.so
//event模塊,同worker模塊相似,生成m個子進程,每一個進程直接響應n個請求,併發響應請求m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,將請求傳遞給服務線程,執行完畢後,又容許釋放。這樣加強了高併發場景下的請求處理能力
有一些網頁在訪問時須要進行用戶的認證,經過輸入用戶名和密碼來訪問httpd服務
<Directory "/var/www/html"> Options Indexes AllowOverride None //利用Apache的rewrite模塊對 URL 進行重寫的時候, rewrite規則會寫在 .htaccess 文件裏,而此處的設置就是是否容許.htaccess文件覆蓋咱們的配置,通常從安全性考慮不容許,因此此處爲none,開啓爲all AuthType Basic //認證類型爲basic AuthName 「Some Private Area...」 //認證名稱 AuthUserFile 「/etc/httpd/conf/.htpasswd」 //用戶和密碼文件的存放路徑 #AuthGroupFile 「/etc/httpd/conf/.htgroup」 //組文件存放路徑,文件中只存放組名和組內成員,密碼讀取用戶密碼文件 Require user tom //對tom能夠訪問 #Require group groupname //容許指定組訪問 #Require valid-user //容許全部合法帳號訪問,只要存在於.htpasswd中即爲合法帳號 </Diretory>
生成用戶和密碼文件:
htpasswd -c -b -m /etc/httpd/conf/.htpasswd tom abc.com
htpasswd
-h 查看選項
-c 建立一個新文件
-m MD5加密(默認)
-b 直接指定密碼(非交互式)
在執行完以上操做以後就算配置完成了
正常狀況下一臺服務器應該只能配置一個站點,若是咱們但願在一臺主機上配置多個站點則須要使用httpd的虛擬主機功能,httpd虛擬主機配置分別能夠基於ip,基於端口,基於域名。在三種虛擬主機中,推薦使用基於域名的虛擬主機。另外當咱們配置了虛擬主機後就不會再讀取主配置文件中的主機配置了。
基於ip時須要服務器對於每個站點都有本身的ip,須要服務器有多個網卡或者啓用網卡的別名。
基於端口須要開啓額外的端口分配給站點,而用戶在訪問時則須要註明訪問的端口才能夠訪問,因爲額外開啓的端口不是默認端口,因此須要用戶本身記住這些端口,因此不建議使用這種方式。
基於域名時則能夠直接經過用戶要訪問的域名而連接到對應的站點,不須要額外的ip和端口,雖然在用戶要訪問一個站點時是dns先將用戶輸入的域名解析爲ip(此時服務器只有一個ip,其上的全部站點都會解析爲一個ip)而後在訪問到服務器,再經過數據包中的端口找到httpd服務,可是因爲在傳輸的數據包中包含有域名的數據,因此在經過ip+端口找到服務器和httpd服務後,httpd經過分析數據包中的域名信息便可知道用戶要訪問的是哪個站點了。可是若是用戶經過ip訪問則會默認訪問到第一個站點。
下面是三種虛擬主機的配置方式:
[root@centos7(nanyibo) ~]# vim /etc/httpd/conf.d/vhost.conf Listen 8080 //開啓額外的監聽端口 Listen 9090 <VirtualHost *:8080> //虛擬主機的開始標籤<VirtualHost ip:port> *表示任意 DocumentRoot "/app/website1" //網頁文件存放的目錄,同時也是URL路徑的起始位置 <Directory "/app/website1"> //虛擬主機的文件目錄標籤 Require all granted //容許全部人訪問 </Directory> </VirtualHost> //虛擬主機的結束標籤 <VirtualHost *:9090> DocumentRoot "/app/website2" <Directory "/app/website2"> Require all granted </Directory> </VirtualHost>
[root@centos7(nanyibo) ~]# vim /etc/httpd/conf.d/vhost.conf <VirtualHost 192.168.153.17:80> DocumentRoot "/app/website1" <Directory "/app/website1"> Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.153.27:80> DocumentRoot "/app/website2" <Directory "/app/website2"> Require all granted </Directory> </VirtualHost> [root@centos7(nanyibo) ~]# ifconfig ens34:0 192.168.*.1/24 //經過別名對一個網卡配置多個ip [root@centos7(nanyibo) ~]# ifconfig ens34:1 192.168.*.2/24
<VirtualHost *:80> ServerName www.baidu.com //指定域名 DocumentRoot "/app/website1" CustomLog "logs/www.baidu.com_access_log" combined //日誌文件存放目錄和日誌格式 <Directory "/app/website1"> Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerName bbs.baidu.com DocumentRoot "/app/website2" CustomLog "logs/bbs.baidu.com_access_log" combined <Directory "/app/website2"> Require all granted </Directory> </VirtualHost>