httpd服務歸納:httpd基本配置(配置文件格式以及常用選項)

一、 httpd文件的基本格式

主配置文件位置, /etc/httpd/conf/httpd.conf 

  1. 配置文件參數格式 

配置參數    值

      特點: 

      配置指令不區分字符大小寫

      值可能區分大小寫

      有些指令可以重復出現多次 

例如: Listen [IP:] 80

    2. 配置文件格式包含三部分 

        全局配置

        主機配置:適用于主機只提供一個站點 

        虛擬主機:用于提供多個站點

    3. 配置文件語法測試: 

# service httpd configtest
# httpd -t
大多數配置修改后可以直接通過service httpd reload來生效, 如果修改了監聽地址或端口,必須重啟服務才能生效;

二、 各項配置參數 

1. Listen [IP:]port 

次指令可以出現多次,用來指定多個不同套接字
    Listen 80  只所有ip的80端口
    Listen 172.16.100.7:8080

2. 配置使用keep alive 

KeepAlive {On|Off}
KeepAliveTimeout 2           # 保持連接時長 
MaxKeepAliveRequests 50      # 最大請求數

3. MPM模塊相關配置

<IfModule prefork.c>
	StartServers: 默認啟動的工作進程數;
	MinSpareServers: 最少空閑進程數;
	MaxSpareServers: 最大空閑進程數;
	ServerLimit: 最大活動進程數;正在被請求的 
	MaxClients: 并發請求的最大數;一定大于ServerLimit
	MaxRequestsPerChild: 每個子進程在生命周期內所能夠服務的最多請求個數;
</IfModule>

<IfModule worker.c>
	StartServers:啟動的子進程的個數
	MaxClients: 并發請求的最大數;
	MinSpareThreads:最小空閑線程數;
	MaxSpareThreads:最大空閑線程數;
	ThreadsPerChild:每個子進程可生成的線程數;
	MaxRequestsPerChild:每個子進程在生命周期內所能夠服務的最多請求個數,0表示不限定;
</IfModule>

注:httpd-2.2.15 不支持event 模塊

4. DSO模塊加載方式

LoadModule foo_module modules/mod_foo.so
    ## 如果是使用相對路徑,則為相對于ServerRoot所定義的位置而言,如果取消裝載,直接在配置文件中把這一行取消
    例子:LoadModule auth_digest_module modules/mod_auth_digest.so
httpd -M   列出已經裝載的所有DSO以及非DSO模塊 
    Loaded Modules:
    core_module (static)
    mpm_prefork_module (static)
    http_module (static)
    so_module (static)
    auth_basic_module (shared)
    
httpd -l   列出支持的非DSO模塊(比如已經編譯進入主程序的)
     Compiled in modules:
          core.c        # 核心模塊
          prefork.c     # 編譯時,有且只有一個模型
          http_core.c   # http核心模塊
          mod_so.c      # 實現模塊裝卸

實際上,在sbin下有三個httpd程序,分別為httpd, httpd.worker, http.event, 分別編譯進入了prefork, worker, event 模塊, 默認使用httpd也就是prefork。如果需要修改可以

把服務腳本配置文件/etc/sysconfig/httpd 中的

#HTTPD=/usr/sbin/httpd.worker

取消注釋,或者改成其他位置 

5. 配置站點根目錄,配置文件中修改

DocumentRoot /path/to/somewhere   ## 這里配置新網頁文件目錄 ,除此之外還需要修改新目錄的屬性,在以下容器中修改

6. 配置頁面訪問屬性  

<Direcotry "/path/to/somewhere">
	Options:
	    Indexes: 缺少指定的默認頁面時,允許將目錄中的所有文件以列表形式返回給用戶;危險;
	    FollowSymLinks: 允許跟隨符號鏈接所指向的原始文件;危險
	    None: 所有都啟用;
	    All: 所有都啟用;
	    ExecCGI: 允許使用mod_cgi模塊執行CGI腳本;
	    Includes: 允許使用mod_include模塊實現服務器端包含(SSI); 
	    MultiViews:允許使用mod_negotiation實現內容協商;
	    SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號鏈接所指向的原始文件;
<Directory>

7. 基于主機的訪問控制 

<Direcotry "/path/to/somewhere">		
	Options
	AllowOverride None ## 下面基于IP的訪問機制是否被禁用,None是不禁用
	Order Deny,Allow # 后面為默人
	Allow from <網段或地址> #允許 
	Deny from  <網段或地址> # 不允許 
<Directory>
最佳匹配機制: 二者都匹配時或者二者都不匹配時以后者默認為準,否則以匹配到的為準

8. 定義默認主頁面, 從左向右尋找,知道找到位置,默認為index.html 

DirectoryIndex index.php index.html home.html default.html

9、用戶目錄

    如果期望讓每個用戶都可以創建個人站點:http://Server_IP/~Username/

userdir disablied: 禁止
userdir public_html

public_html是用戶家目錄下的目錄名稱,所有位于此目錄中的文件均可通過前述的訪問路徑進行訪問

用戶的家目錄得賦予運行httpd進程的用戶擁有(進入)執行權限;

10、配置日志功能

/var/log/httpd/
access.log: 訪問日志,其需要記錄的內容需要自定義
error.log: 錯誤日志
訪問日志:
    CustomLog "/path/to/access_log_file" Format_Name ## 配置指令,定義日志文件的指令 
    LogFormat Format_String  Format_Name             ## 配置指令, 定義日志格式
        %h: 客戶端地址
        %l: 遠程登錄名,通常為-
        %u: 認證時的遠程用戶名,沒有認證時為-
        %t: 收到請求時的時間;
        %r: 請求報文的起始行;
        %>s: 響應狀態碼;
        %b: 響應報文的長度,單位為字節
        %{Header_Name}i: 記錄指定請求報文首部的內容(value);
實例:   
        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

詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

錯誤日志:

ErrorLog

11. 路徑別名

    Alias /alias/ "/path/to/somewhere/" ##前面加“/”后面也要加,否則都不加 
    意味著訪問http://Server_IP/alias/時,其頁面文件來自于/path/to/somewhere這個位置

12. 設定默認字符集,默認為UTF-8,字符集和網頁不匹配,訪問時為亂碼

    AddDefaultCharset UTF-8 

13. CGI腳本路徑別名 

    路徑別名: URL –> fileSystem  URL文件系統某位置的映射 

    CGI腳本路徑別名: URL –> 腳本存放路徑 

    CGI(Common Gateway Interface): 允許網頁訪問在特定目錄下執行一些腳本,shell腳本依賴系統命令,有時需要UID和GID, 這也造成了安全隱患。 

    PHP,python 等腳本語言也是用類似的協議,但是由于有自己庫,可以避免依賴系統庫。 

    控制CGI腳本路徑別名的模塊: mod_alias, mod_cgi 

    在/etc/httpd/conf/httpd.conf 配置 

ScriptAlias /URL/ "/path/to/somewhere/"
實例 
## 配置文件中配置 
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

## 在/var/www/cgi-bin/ 下面創建測試腳本,如下,并給執行權限 

#!/bin/bash 
#               

cat << EOF
Content-Type: text/html

<pre>
The hostname is: `hostname`.
The time is: `date`.
</pire>

EOF

## 為了測試方便,關閉虛擬機的iptables,用宿主機訪問192.168.233.128/cgi-bin/test.sh, 的到如下結果,說明測試成功

QQ圖片20150508220910.png

14. 基于用戶的訪問控制

    虛擬用戶: 由于安全需要,服務器的訪問用戶,并不是系統真正的用戶。

    虛擬用戶信息的存放方式: 

            文件: 例如,/etc/httpd/conf/.htpasswd

            SQL數據庫, dbm, ldap 等。 

 

    認證相關的模塊:

            認證類型: auth* 

1.basic 基本認證, 用戶名和密碼為明文傳輸
LoadModule auth_basic_module modules/mod_auth_basic.so

2. 摘要認證,用戶名和密碼哈希編碼后傳輸 
LoadModule auth_digest_module modules/mod_auth_digest.so

            認證提供者(authentication provider):賬號和密碼的存放位置, authn* 

LoadModule authn_file_module modules/mod_authn_file.so         ## 例如基于文件認證
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so

            認證授權機制(authentication): 根據什么進行授權 

LoadModule authz_host_module modules/mod_authz_host.so                    ##   主機 
LoadModule authz_user_module modules/mod_authz_user.so                    ##   用戶名
LoadModule authz_owner_module modules/mod_authz_owner.so                  ##   文件屬主 
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so          ##   用戶組

    舉例: 

        1) 基于文件,作基本認證,基于用戶名密碼 

## 創建/var/www/html/fin 文件夾,并在里面創建index.html 加入簡單內容, 這個文件夾將被保護 

## 在配置文件中添加 
<Directory "/var/www/html/fin">
        Options None
        AllowOverride AuthConfig                                    ## 明確指出覆蓋前面設置的用戶訪問控制,使用用戶認證進行控制 
        AuthType Basic                                              ## 認證類型為基本認證
        AuthName "Private Area"                                     ## 瀏覽器彈出的質詢框上面的說明 
        AuthBasicProvider file                                      ## 基于文件認證
        AuthUserFile /etc/httpd/conf/.htpasswd                      ## 認證文件的存放位置 
        Require valid-user
</Directory>

## 使用使用htpasswd命令生成認證庫 
       	-c: 創建文件,創建第一個用戶時使用       ## 只有第一次創建文件時需要這個選項,以后追加不需要,否則會被覆蓋
	-m: 密碼基于MD5編碼存儲	                 ## 使用MD5碼進行編碼	
		
   # htpasswd -c -m /etc/httpd/conf/.htpasswd tom 
     New password: 
     Re-type new password: 
     Adding password for user tom

   # htpasswd -m /etc/httpd/conf/.htpasswd jerry  
     New password: 
     Re-type new password: 
     Adding password for user jerry	

        2)基于用戶組

<Directory "/var/www/html/fin">
	Options None
	AllowOverride AuthConfig
	AuthType Basic
	AuthName "Private Area"
	AuthBasicProvider file
	AuthUserFile /etc/httpd/conf/.htpasswd
	AuthGroupFile /etc/httpd/conf/.htgroup
	Require group GroupName
</Directory>

組文件:組文件格式
	組名: 用戶1 用戶2 用戶3

15. 虛擬主機 

一個物理服務器提供多個站點; 使用虛擬主機得先取消中心主機

Web: Socket(IP, port)
		
    1) 基于不同的IP實現不同的虛擬主機
			變化IP
    2) 基于不同的port實現不同的虛擬主機
			變化port
    3) 基于不同的FQDN實現不同的虛擬主機 : httpd 的請求首部中的host, 來確定訪問的那個主機,如果用戶用ip地址請求,則自上而下一次匹配
			變化ServerName的值
			httpd 2.2.2 需要啟用 NameVirtualHost *:80, 而且下IP:port需要一致 
			
使用前,要取消掉中心主機,然后開啟virualhost 容器 
		<virtualhost IP:port>
			ServerName 
			DocumentRoot ""
			<Directory "">
				Options
			</Directory>
			ServerAlias
			ServerAdmin
		</virtualhost>

關閉中心主機極為,把全局的
DocumentRoot 注釋掉

虛擬主機的單獨配置:

    1)用戶認證

    2)訪問日志

    3)錯誤日志

    4)別名

    5)腳本別名

實例:

## 注釋掉中心主機 DcumentRoot指令 
#DocumentRoot "/var/www/html"

1) 基于IP的虛擬主機 
<VirtualHost 192.168.233.128:80>
    DocumentRoot /var/www/a.com
    ServerName www.a.com
</VirtualHost>

<VirtualHost 172.25.136.56:80>
    DocumentRoot /var/www/b.com
    ServerName www.b.com
</VirtualHost>

## 創建/var/www/b.com 和 /var/www/a.com 兩個目錄,并且創建簡單的測試首頁,index.html
# mkdir /var/www/b.com && echo "hello "  > /var/www/index.html 
# mkdir /var/www/a.com && echo "hello  > /var/www/index.html   

## reload 配置文件 
# service httpd reload 

## 使用elinks 測試,注意,要給自己主機設置兩個端口,與配置文件容器中的相匹配
# elinks --dump 192.168.233.128 
   hello! www.a.com
# elinks --dump 172.25.136.56 
   hello www.b.com
   
2) 基于端口實現虛擬主機 
## 修改配置文件保證,httpd監聽在需要的端口上,這里設置為80 和 8080 
Listen 80 
Listen 8080 

## 同樣要注釋掉原主機,然后添加虛擬主機容器 
<VirtualHost 192.168.233.128:80>
    DocumentRoot /var/www/a.com
    ServerName www.a.com
</VirtualHost>

<VirtualHost 192.168.233.128:8080>
    DocumentRoot /var/www/b.com
    ServerName www.b.comon
</VirtualHost>
             
## 由于改變了端口,所以需要重啟服務
# service httpd restart 

## 同樣使用elink 測試 
# elinks --dump 192.168.233.128:8080 
   hello www.b.com
# elinks --dump 192.168.233.128:80
   hello! www.a.com
   
3)基于不同主機名,添加虛擬主機 
## 在/etc/hosts 文件同一條IP添加兩個解析結果 
192.168.233.128 www.a.com 
192.168.233.128 www.b.com 

## 在2.2.2 版本中要啟動 NameVirtualHost 項, 并保證內容和下面容器中的ip和端口寫法一致 
NameVirtualHost 192.168.233.128:80 

## 修改配置文件, 添加虛擬主機容器 
<VirtualHost 192.168.233.128:80>
    DocumentRoot /var/www/a.com
    ServerName www.a.com
</VirtualHost>

<VirtualHost 192.168.233.128:80>
    DocumentRoot /var/www/b.com
    ServerName www.b.com
</VirtualHost>

## 重新加載配置文件
# service httpd reload 

## 測試  
# elinks --dump www.a.com
   hello! www.a.com
# elinks --dump www.b.com
   hello www.b.com

原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/4052

(2)
以馬內利以馬內利
上一篇 2015-05-13 18:39
下一篇 2015-05-13 18:42

相關推薦

  • 筆記整理:權限管理1-基礎權限管理&默認權限

    權限管理: 權限的分配根據owner和group來進行分配的   對于文件,各個權限的意義: r:可以使用工具查看內容 w:往里寫 x:運行,提請內核發起一個進程 對于目錄,各個權限的意義: r:用ls 查看目錄列表   w:可以創建或刪除目錄中的文件   x:可以使用ls -l查看文件列表,也可cd進去   管理命令…

    Linux干貨 2016-08-05
  • bash腳本編程之流程控制if、for、while、until簡介

    概述     之前介紹了一些bash腳本編程的變量、運算、條件測試的一些基礎內容,了解了腳本實際上就是一些語句加上一些流程控制組合起來,實現某種功能的可執行文件。我們知道,條件測試的目的,實際就是為了實現一種流程的控制,那么本篇就簡單介紹一下bash里面常見的流程控制語句,包括選擇、循環等內容,具體包括以下幾個部分: …

    Linux干貨 2016-08-18
  • Centos7下的systemd管理

    systemd簡介 Systemd是由紅帽公司的一名叫做Lennart Poettering的員工開發,systemd是Linux系統中最新的初始化系統(init),它主要的設計目的是克服Sys V 固有的缺點,提高系統的啟動速度,systemd和upstart是競爭對手,ubantu上使用的是upstart的啟動方式,centos7上使用systemd替換…

    Linux干貨 2016-09-23
  • 文本處理三劍客之Gawk ?

        AWK可以說是一種語言,他有著自己的語法,可以實現函數定義,變量賦值,條件選擇(循環,判斷,選擇)…總之是值得深入研究一下的。     AWK的起源:是個報告生成器,可以格式化文本輸出內容,它的命名是由Aho,Weinberger,Kernighan三位作者首…

    Linux干貨 2016-09-21
  • 網絡配置

    Internet 協議特征  運行于OSI 網絡層  面向無連接的協議  獨立處理數據包  分層編址  盡力而為傳輸  無數據恢復功能     IP地址 它們可唯一標識IP 網絡中的每臺設備 每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址&…

    Linux干貨 2016-09-06
  • Linux 第七天: (08月05日) 練習和作業

    Linux 第七天: (08月05日) 練習和作業       1 找出ifconfig命令結果中本機的所有IPv4地址 ifconfig | tr -cs '[0-9].''\n' | sort -ut '.' -k3 -n 或ifconfig | head -2 |…

    Linux干貨 2016-08-08

評論列表(4條)

  • stanley
    stanley 2015-05-13 18:41

    馬內利出品,必屬精品

    • 以馬內利
      以馬內利 2015-05-14 09:03

      @stanley囧。。。。。。

  • YUANWOW
    YUANWOW 2015-08-30 14:21

    prefork 配置那里
    MaxClients: 并發請求的最大數;一定大于ServerLimit
    不是大于 是 小于
    ServerLimit一定要大于等于MaxClients

    • 以馬內利
      以馬內利 2015-09-01 10:02

      @YUANWOW哦哦 對哦,我給寫反了好像。當時沒仔細看,多謝指出 !

欧美性久久久久