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(長連接)
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.so5、配置網站根目錄
DocumentRoot "/var/www/html" #指定網站的主目錄 <Directory "/var/www/html"> #容器內定義站點的訪問權限 </Directory> <Location "URL"> #容器內限定用戶的訪問方法 </Location>6、配置頁面文件的訪問屬性
<Directory "/var/www/html">OptionsIndexes #是否允許索引頁面文件,建議關閉FollowSymLinks #是否跟隨軟連接文件SymLinksifOwnerMatch #跟隨符號鏈接,只允許訪問運行apache的用戶有屬主權限的文件ExecCGI: #是否允許執行CGI腳本;AllNone </Directory>7、基于客戶端訪問控制
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.html10、配置日志功能
日志有兩類:訪問日志(格式自定義)、錯誤日志
錯誤日志: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、支持的字符集
12、路徑別名
可以隱藏網站的真實目錄,
Alias /test/ "/www/test/" #配置別名 <Directory "/www/test"> #可以給別名目錄定義訪問權限Options NoneAllowOverride NoneOrder allow,denyAllow 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/web2ServerName 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)生成證書申請
(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證書導入到客戶端可信任證書服務器,并驗證
常用的配置基本就這些了,如有疏漏或錯誤之處,歡迎大家批評指正!
轉載于:https://blog.51cto.com/liyandong/1282225
總結
以上是生活随笔為你收集整理的Linux服务之httpd基本配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端HTML5框架
- 下一篇: 关于ORA-01187: cannot