當今主流的開源Web服務器軟件有httpd(Apache),lighttpd,nginx,thttpd等,而httpd是迄今爲止使用量多的web服務器,據統計目前httpd的全球佔有量是47%左右,雖然有所下降但是使用兩仍然是最多的,統計web服務器使用率的網站是:http://news.netcraft.com/
好了廢話不多說,還是來介紹一下httpd的一些基本配置吧!
一、基本介紹
1、版本
httpd-1.3
httpd-2.0
httpd-2.2
httpd-2.4
目前爲止最新的版本是httpd-2.4.6,但是這裏我用的是系統自帶的RPM包安裝的httpd-2.2.15版本的,最新版本配置可能會有所不同
2、模型:
高度模塊化:DSO
MPM:Multipath Processing Module #多處理模塊
prefork:一次一個進程響應一個請求
worker:一個進程生成多個線程,一個線程響應一個請求
event:基於事件驅動,一個進程響應多個請求
3、安裝
這裏就直接rpm包安裝了,光盤上就有軟件包
yum install httpd
4、httpd安裝完後的基本信息
服務腳本:/etc/rc.d/init.d/httpd
運行目錄:/etc/httpd/
配置文件:/etc/httpd/conf
主配置文件:/etc/httpd/conf/httpd.conf
擴展配置:/etc/httpd/conf.d/*.conf
socket:http:80/tcp,https:443/tcp
網頁文件目錄(DocumentRoot):/var/www/html
CGI:/var/www/cgi-bin/
默認主頁面文件:/var/www/html/index.html
5、主配置文件結構
全局配置:對主服務器或虛擬主機都有效,且有些功能是服務器自身工作屬性;
主服務器配置:主站屬性
虛擬服務器:虛擬主機及屬性定義
6、測試配置和查看的命令
所使用的
service httpd configtest #測試配置文件有沒有語法錯誤 httpd -t #同上 httpd -l #當前服務器所使用的模型及開啓模塊 httpd -D DUMP_MODULES #當前服務器支持的模塊 service httpd reload #重新加載配置文件 service httpd restart #重啓httpd服務
注意:修改配置文件後要重新加載配置文件,修改服務器監聽端口後要重啓服務
二、基本配置
溫馨提示:配置httpd的工作屬性時,指令不區分大小寫,但有約定俗成的習慣:單詞的首字母大寫;指令的值很有可能區分大小寫;有些指令可以重複使用多次;
1、配置監聽的端口:
Listen [IP:]PORT
例如:Listen 172.16.3.1:80
2、配置所選用的MPM的屬性
安裝完默認使用prefork模型
<IfModule prefork.c> StartServers 8 #服務啓動後默認開啓的進程數 MinSpareServers 5 #最少空閒進程數 MaxSpareServers 20 #最多空閒進程數 ServerLimit 256 #每個進程允許開啓最多的子進程數 MaxClients 256 #每個進程最多用戶鏈接數 MaxRequestsPerChild 4000 #長連接時每個用戶最多請求數 </IfModule>
worker模型:要支持worker模型需要配置/etc/sysconfig/httpd,開啓以下行:
HTTPD=/usr/sbin/httpd.worker
<IfModule worker.c> StartServers 4 #服務啓動默認開啓的進程數 MaxClients 300 #最多同時客戶連接數 MinSpareThreads 25 #最少空閒進程數 MaxSpareThreads 75 #最好空閒進程數 ThreadsPerChild 25 #每個進程開啓的線程數 MaxRequestsPerChild 0 </IfModule>
3、配置服務器支持keep-alived(長連接)
KeepAlive {On|Off} #是否支持長連接 KeepAliveTimeout 2 #長連接超時時間 MaxKeepAliveRequests 50 #超時時間內允許請求的次數
4、配置加載模塊
# LoadModule foo_module modules/mod_foo.so # LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_alias_module modules/mod_authn_alias.so
5、配置網站根目錄
DocumentRoot "/var/www/html" #指定網站的主目錄 <Directory "/var/www/html"> #容器內定義站點的訪問權限 </Directory> <Location "URL"> #容器內限定用戶的訪問方法 </Location>
6、配置頁面文件的訪問屬性
<Directory "/var/www/html"> Options Indexes #是否允許索引頁面文件,建議關閉 FollowSymLinks #是否跟隨軟連接文件 SymLinksifOwnerMatch #跟隨符號鏈接,只允許訪問運行apache的用戶有屬主權限的文件 ExecCGI: #是否允許執行CGI腳本; All None </Directory>
7、基於客戶端訪問控制
系統默認允許所有人訪問 <Directory "/var/www/html"> Order #定義allow和deny那個爲默認法則;寫在後面的爲默認法則:寫在前面的指令沒有顯示定義的即受後面的指令控制: Order allow,deny Allow from all #所有人可以訪問 </Directory> 配置允許172.16.0.0/16訪問,但不允許172.16.3.1訪問 <Directory "/var/www/html"> Order allow,deny Deny from 172.16.3.1 #禁用一個IP訪問 Allow from 172.16.0.0/16 #允許一個網段訪問 </Directory>
8、userdir個人站點
<IfModule mod_userdir.c> # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disabled #註釋此項 # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # UserDir public_html #開啓此項 </IfModule>
重新加載配置文件後用:http://HOST/~username/
例如:http://172.16.3.1/~centos/
9、定義默認主頁
DirectoryIndex index.php index.jsp index.html
10、配置日誌功能
日誌有兩類:訪問日誌(格式自定義)、錯誤日誌
錯誤日誌: ErrorLog "/path/to/error_log_file" 訪問日誌: CustomLog "/path/to/custom_log_file" logformat 日誌格式:{combined|common|agent} LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent %h #主機名 %l # %u #用戶名 %t #請求到達的時間 %r #請求報文的起始行,方法 %s # %b #響應報文的大小 %{Foobar}i #顯示從發那個站點跳轉過來 %{User-Agent}i #用戶代理
11、支持的字符集
AddDefaultCharset UTF-8
12、路徑別名
可以隱藏網站的真實目錄,
Alias /test/ "/www/test/" #配置別名 <Directory "/www/test"> #可以給別名目錄定義訪問權限 Options None AllowOverride None Order allow,deny Allow from 172.16.0.0/16 </Directory>
13、腳本路徑別名
調用服務器上的腳本程序,但不希望腳本放在網站的目錄下
ScriptAlias /cgi-bin/ "/www/cgi-bin/" #定義cgi腳本路徑別名 # vi /wwww/cgi-bin/test.sh #寫一個測試腳本 #!/bin/bash #cat << EOF Content-Type:text/html #這裏要有一個空行否則可能會測試不成功 <pre> The hostname is: `hostname`. #輸出當前系統的主機名 The timeis: `date`. #顯示時間 </pre> EOF
測試:顯示的是腳本執行後的結果
14、基於用戶訪問控制
當你的網站或者站點的某個路徑只想讓你授權的用戶訪問時,就可以使用基於用戶的訪問控制
這裏使用htpasswd命令建立用戶帳號文件
htpasswd -c #第一次使用-c創建新文件,不是第一次不要使用此選項 -m #用戶密碼使用MD5加密後存放 -s #用戶密碼使用SHA加密後存放 -p #用戶密碼不加密 -d #禁用一個賬戶 -e #啓用一個賬戶 例如: # htpasswd -c -m /etc/httpd/conf/.htpass tom 命令 選項 生成的用戶文件路徑及文件名 用戶名 # htpasswd -m /etc/httpd/conf/.htpass jerry # 再次添加用戶時就不要使用-c選項了,否則會覆蓋之前內容先生成
(1)建立用戶帳號文件
# htpasswd -c -m /etc/httpd/conf/.htpass tom
(2)修改主配置文件
# vi /etc/httpd/conf/httpd.con
DocumentRoot "/www/html" #此時網站根目錄就是/www/html <Directory "/www/html"> Optins Indexes AllowOverride AuthConfig AuthName "Oaly for employees." #登錄提示信息,可自定義 AuthType Basic #認證方式 AuthUserFile /etc/httpd/conf/.htpass #用戶帳號文件 Require valid-user #允許的用戶
Require 指定可以訪問的用戶,可以指定單個用戶,直接寫用戶名就可以了,用戶名可以寫多個用空格分開,也可以指定所有用戶就用 valid-user
15、配置虛擬主機
(1)註釋主服務器,添加虛擬主機
# DocumentRoot "/www/html" #註釋主服務器 NameVirtualHost 172.16.3.1:80 #開啓虛擬主機 <VirtualHost 172.16.3.1:80> DocumentRoot /www/web1 #虛擬主機的網站根目錄 ServerName web1.lyd.com #主機名 </VirtualHost> <VirtualHost 172.16.3.1:80> DocumentRoot /www/web2 ServerName web2.lyd.com </VirtualHost>
(2)給虛擬主機提供測試文件
mkdir /www/web{1,2} echo web1.lyd.com > /www/web1/index.html echo web2.lyd.com > /www/web2/index.html
(3)配置完後用 httpd -t 測試配置文件有沒有錯誤
(4)重啓服務 service httpd restart
(5)驗證,修改驗證客戶端的hosts文件,
windows客戶端
開始-->運行-->輸入"c:\windows\system32\drivers\etc\hosts"用記事本打開並添加以下行
172.16.3.1web1.lyd.com
172.16.3.1web2.lyd.com
16、配置支持https
(1)安裝httpd支持ssl模塊
yum install mod_ssl -y
(2)自建CA
# cd /etc/pki/CA # (umask 077; openssl genrsa -out private/cakey.pem 2048) # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
(3)生成私鑰
cd /etc/httpd/conf/ mkdir ssl cd ssl (umask 077; openssl genrsa -out httpd.key 1024)
(4)生成證書申請
openssl req -new -key httpd.key -out httpd.csr
(5)ca簽署證書
openssl ca -in httpd.csr -out httpd.crt -days 365
(6)修改httpd的ssl配置文件
vi /etc/httpd/conf.d/ssl.conf
<VirtualHost 172.16.3.1:443> DocumentRoot "/www/web1" ServerName www.lyd.com SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
(7)將ca證書導入到客戶端可信任證書服務器,並驗證
常用的配置基本就這些了,如有疏漏或錯誤之處,歡迎大家批評指正!