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.soLoadModule auth_digest_module modules/mod_auth_digest.soLoadModule authn_file_module modules/mod_authn_file.soLoadModule 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,denyAllow from all    #所有人可以訪問</Directory>配置允許172.16.0.0/16訪問,但不允許172.16.3.1訪問<Directory "/var/www/html">Order allow,denyDeny 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\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" commonLogFormat "%{Referer}i -> %U" refererLogFormat "%{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 << EOFContent-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 IndexesAllowOverride AuthConfigAuthName "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.htmlecho 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 sslcd 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.comSSLCertificateFile /etc/httpd/conf/ssl/httpd.crtSSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key

(7)將ca證書導入到客戶端可信任證書服務器,並驗證


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

本文出自 “菜鳥學飛” 博客,請務必保留此出處http://liyandong.blog.51cto.com/2094164/1282225


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com