Linux服務之httpd基本配置詳解

   當今主流的開源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證書導入到客戶端可信任證書服務器,並驗證


常用的配置基本就這些了,如有疏漏或錯誤之處,歡迎大家批評指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章