httpd-2.2 配置及用法徹底攻略

 apache是一款穩定的流行的web軟件,是linux操做系統中默認的web管理軟件。在RHEL/Centos系列中能夠用rpm直接進行安裝,服務名爲httpd。apache有不少設置和調優 的注意事項,下面的文章將帶你玩爆帶你玩轉apache,玩轉httpdjavascript

一、監聽的套接字
Listen [IP:]port

此指令能夠出現屢次, 用於指定監聽多個不一樣的套接字:php

Listen 80

Listen 192.168.1.116:8080
二、配置文件中使用的 keep alive

目前多數的瀏覽器都請求服務器保持持續鏈接,這種功能就稱爲「KeepAlive」,它是HTTP1.1中的標準規格,通常是用來強化服務器的性能。在使用保持鏈接功能時,設置客戶一次請求鏈接能影響文件的最大上限,建議把默認值設爲ON,以便提升訪問性能。但當使用負載均衡時,會影響負載均衡的效果,在未斷開鏈接以前,同義客戶端始終被定向到同一臺服務器。css

KeepAlive {On|Off}

    KeepAliveTimeout 2                  #超時時間

    MaxKeepAliveRequests 50       #長鏈接最大請求數
三、MPM
 <IfModule prefork.c>  #斷定模塊是否存在
        StartServers: 默認啓動的工做進程數;   #不包括主進程,主進程只是負責子進程的建立回收等
        MinSpareServers: 最少空閒進程數;
        MaxSpareServers: 最大空閒進程數;
        ServerLimit: 最大活動進程數;
        MaxClients: 併發請求的最大數;   #請求鏈接進來不必定會活動,要小於等於serverlimit
        MaxRequestsPerChild: 每一個子進程在生命週期內所可以服務的最多請求個數;
 </IfModule prefork.c>  
 
 <IfModule prefork.c>  
        StartServers:啓動的子進程的個數
        MaxClients: 併發請求的最大數;
        MinSpareThreads:最小空閒線程數;
        MaxSpareThreads:最大空閒線程數;
        ThreadsPerChild:每一個子進程可生成的線程數;
        MaxRequestsPerChild:每一個子進程在生命週期內所可以服務的最多請求個數,0表示不限定;
 </IfModule prefork.c>  
四、DSO模塊加載方式
   LoadModule module_name /path/to/module

若是使用相對路徑,則對於ServerRoot所定義的位置而言;例如:html

 LoadModule php5_module /usr/lib64/httpd/modules/php5.so

讓服務重載配置文件方能生效;java

httpd -M: 列出已經裝載的全部DSO及非DSO模塊
httpd -l: 列出支持使用的非DSO模塊

默認使用prefork模塊,若想使用worker,則修改腳本配置文件:linux

[root@localhost conf]# vim /etc/sysconfig/httpd 
 
#HTTPD=/usr/sbin/httpd.worker    #啓用此項,修改所使用的二進制程序
五、配置站點根目錄
DocumentRoot /path/to/somewhere

Apache服務器存放網頁的路徑,默認全部要求提供HTTP服務的鏈接,都以這個目錄爲主目錄,默認爲 /var/www/html。web

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

<Directory>能夠配置網站目錄下的訪問屬性,使用<Directory ~ "path">能夠基於正則表達式的匹配,可是通常不建議使用,會耗費時間。相似的指令還有:
 
 <Location [~] "">: 配置URL訪問屬性,與<Directory>類似(能夠配置像內生的status頁面或者定義了別名的路徑等);
 
<File [~] "">  : 限定單個文件的訪問屬性;
 
<locationmatch "">  : 至關於Location ~  ,但通常建議使用此配置進行正則匹配;

若是某要配置其屬性的URL能映射到某具體文件系統路徑,建議使用。正則表達式

七、基於主機的訪問控制
 <Direcotry "/path/to/somewhere">		
        Options
        AllowOverride None    #AllowOverride表示如下基於ip的訪問控制是否被禁用,none表示不被禁用
        Order Deny,Allow        #後面的表示默認規則
        Allow
        Deny
 </Direcotry>

基於IP控制:數據庫

       Allow from
        Deny from
            IP, Network Address
            172.16
            172.16.0.0
            172.16.0.0/16
            172.16.0.0/255.255.0.0

兩者都匹配或兩者都無匹配項時,則之後者爲準;不然,則以匹配到的爲準;apache

八、定義默認主頁面
DirectoryIndex index.php index.html home.html default.html  #自左而右依次找
九、用戶主頁

若是指望讓每一個用戶均可以建立我的站點:http://Server_IP/~Username/

  userdir disablied: 禁止
  userdir public_html:public_html是用戶家目錄下的目錄名稱,全部位於此目錄中的文件都可經過前述的訪問路徑進行訪問

配置用戶主頁示例:

[root@localhost conf]# vim httpd.conf  #首先在配置文件中啓用如下選項
 
 366     #UserDir disabled
 367 
 368     UserDir public_html
 
[root@localhost httpd]# service httpd reload
[root@localhost conf]# useradd feiyu
[root@localhost conf]# su -  feiyu
[feiyu@localhost ~]$ mkdir public_html
[feiyu@localhost ~]$ cd public_html/
[feiyu@localhost public_html]$ echo "hello feiyu"  > index.html

此時能夠訪問了。但apache用戶沒有權限讀取文件,因此還得定義訪問權限

[feiyu@localhost ~]$ ls -ld /home/feiyu/
drwx------. 6 feiyu feiyu 4096 Feb 15 20:42 /home/feiyu/
[feiyu@localhost ~]$ setfacl -m u:apache:x /home/feiyu/
[feiyu@localhost ~]$ getfacl /home/feiyu/
getfacl: Removing leading '/' from absolute path names
# file: home/feiyu/
# owner: feiyu
# group: feiyu
user::rwx
user:apache:--x
group::---
mask::--x
other::---
[feiyu@localhost ~]$ curl 192.168.1.117/~feiyu/
hello feiyu
十、配置日誌功能

默認日誌目錄:/var/log/httpd/

 access.log: 訪問日誌,其須要記錄的內容須要自定義
 
 error.log: 錯誤日誌

訪問日誌:CustomLog 「/path/to/access_log_file」 Format_Name #CustomLog自定義訪問日誌路徑LogFormat Format_String Format_Name

%h: 客戶端地址

%l: 遠程登陸名,一般爲-

%u: 認證時的遠程用戶名,沒有認證時爲-

%t: 收到請求時的時間;

%r: 請求報文的起始行;

%>s: 響應狀態碼;

%b: 響應報文的長度,單位爲字節

%{Header_Name}i: 記錄指定請求報文首部的內容(value);

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

錯誤日誌: ErrorLog

十一、路徑別名
  Alias /alias/ "/path/to/somewhere/"

意味着訪問http://Server_IP/alias/時,其頁面文件來自於/path/to/somewhere這個位置;
注意:先後路徑要一致,結尾都有」/」或者都沒有

十二、設定默認字符集
    AddDefaultCharset  UTF-8

定義cgi腳本路徑別名:

    CGI: Common Gateway Interface協議(執行某些文件時要以管理員的權限執行,已經不多被使用了)
1三、CGI腳本路徑別名
CGI: Common Gateway Interface協議(執行某些文件時要以管理員的權限執行,已經不多被使用了)

定義cgi腳本路徑別名:

ScriptAlias /URL/ "/path/to/somewhere/"   #使用此種方法定義文件則被使用cgi協議執行或者顯式使用execcgi
1四、基於用戶的訪問控制

當你的網站或者站點的某個路徑只想讓你受權的用戶訪問時,就可使用基於用戶的訪問控制。

虛擬用戶:可使用文件,SQL數據庫或者ldap等機制進行認證。認證類型(auth):basic: 基本認證,賬號和密碼明文發送;

digest:摘要認證,hash編程以後發送,大多瀏覽器不支持;

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

受權機制(authorization):根據什麼進行受權

例:基於文件,作基本認證,根據用戶和組進行受權

使用htpasswd命令生成認證庫
htpasswd:
 
-c #第一次使用-c建立新文件,不是第一次不要使用此選項
-m #用戶密碼使用MD5加密後存放
-s #用戶密碼使用SHA加密後存放
-p #用戶密碼不加密
-d #禁用一個帳戶
-e #啓用一個帳戶

[root@localhost fin]# htpasswd -c -m /etc/httpd/conf/.htpasswd feiyu     #第一次須要使用-c選項建立文件
New password: 
Re-type new password: 
Adding password for user feiyu
[root@localhost fin]# htpasswd -m /etc/httpd/conf/.htpasswd feiyu1
New password: 
Re-type new password: 
Adding password for user feiyu1
配置認證機制
 <directory "/www/htdocs/fin">
        Options None
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "Private Area"
    #	AuthBasicProvider file                    #能夠不用指,默認爲文件
        AuthUserFile /etc/httpd/conf/.htpasswd     #所使用的認證文件
        Require valid-user      #容許文件中的全部合法帳號
  	

訪問界面以下所示:

訪問控制(1)

基於組進行認證

先建立用戶再建立組文件:

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

    <directory "/www/htdocs/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五、虛擬主機

虛擬主機意即一個物理服務器提供多個站點,之前剛建站時使用的是阿里雲的免費虛擬主機,我想應該就是基於此方法配置的。虛擬主機的實現方法有三種:

基於不一樣的IP實現不一樣的虛擬主機:變化IP

基於不一樣的port實現不一樣的虛擬主機:變化port

基於不一樣的FQDN實現不一樣的虛擬主機:變化ServerName的參數

配置使用虛擬主機:

(1)註釋中心主機,並啓用相關配置

[root@localhost http]# vim /etc/httpd/conf/httpd.conf
 
DocumentRoot "/var/www/html"     #註釋中心主機
 
NameVirtualHost *:80    #使用基於域名的虛擬主機時須要啓動此項,而且下面的配置與其保持一致,在 httpd-2.4 中不須要使用    

(2)基於ip的虛擬主機:

<VirtualHost 192.168.1.117:80>   
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
</virtualhost>
 
<VirtualHost 192.168.1.117:80> 
        ServerName www.feiyu2.com
        DocumentRoot "/var/www/html/feiyu2"
</virtualhost>

(3)基於端口的虛擬主機:

<VirtualHost 192.168.1.117:80>
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
</VirtualHost>

<VirtualHost 192.168.1.117:8080> ServerName www.feiyu2.com DocumentRoot "/var/www/html/feiyu2"
</VirtualHost>
(4)基於域名的虛擬主機:

NameVirtualHost *:80
 
<VirtualHost *:80>
        ServerName www.feiyu1.com
        DocumentRoot "/var/www/html/feiyu1"
        CustomLog "/var/log/httpd/feiyu1-access_log" combined
</VirtualHost>
 
<VirtualHost *:80>
        ServerName www.feiyu2.com
        DocumentRoot "/var/www/html/feiyu2"
        CustomLog "/var/log/httpd/feiyu2-access_log" combined
</VirtualHost>
1六、啓用 https 協議

https是在http的基礎上進行ssl/tls加密實現的結果,啓用https當然更安全,不會存在流量劫持等風險,但使用https就再也不是三次握手了,它會增長創建鏈接的時間。

http與https首次請求對比圖:

PIC1

PIC2

http: 文本協議,80/tcphttps: 二進制格式的協議, 443/tcpSSL握手要完成的工做:

交換協議版本號

選擇雙方都支持的加密方式

對兩端實現身份驗正

密鑰交換

SSL會話基於IP地址進行,不支持在基於FQDN的虛擬主機上實現,因此在只有一個公網IP的服務器上使用虛擬主機時,只能爲一個站點使用https。

配置支持https:

(1)安裝httpd支持ssl模塊
[root@localhost ~]# yum install mod_ssl -y
(2)自建CA
[root@localhost ~]# cd /etc/pki/CA
[root@localhost ~]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[root@localhost ~]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
(3)生成私鑰
[root@localhost ~]# cd /etc/httpd/conf/
[root@localhost ~]# mkdir ssl
[root@localhost ~]# cd ssl
[root@localhost ~]# (umask 077; openssl genrsa -out httpd.key 1024)
(4)生成證書申請
[root@localhost ~]# openssl req -new -key httpd.key -out httpd.csr
(5)CA簽署證書
[root@localhost ~]# openssl ca -in httpd.csr -out httpd.crt -days 365
(6)修改httpd的ssl配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html/feiyu1"
ServerName www.feiyu.com
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
(7)驗證導入瀏覽器

驗證,可使用如下命令進行驗證或者將證書導入到瀏覽器並進行訪問:

# openssl s_client -connect IP:port -CAfile /path/to/CA_certificate_file
1七、服務器status頁面

status頁面是httpd內生的,且此信息能夠經過web予以顯示,此信息是關於服務器的運行狀態的因此不能對全部人都顯示。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
AuthType Basic
AuthName "Server Status"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require valid-user
Order deny,allow
Allow from all

<Location /server-status>

SetHandler: 顯式的定義使用的處理器 ,是當文件被調用時,Apache內部表示形式;通常每種文件類型都有其隱式處理器;

1八、使用mod_deflate模塊壓縮頁面優化傳輸速度

通常當CPU多空閒,帶寬壓力大時纔會啓用壓縮,啓用壓縮不但能優化傳輸速度也能節約帶寬,可是其一個弊端就是會使緩存的命中率降低。

[root@localhost html]# vim /etc/httpd/conf/httpd.conf
 
SetOutputFilter DEFLATE    #啓用deflate
 
 [root@localhost conf.d]# vim deflate.conf
 
    # Restrict compression to these MIME types    定義要壓縮的文件類型 
    AddOutputFilterByType DEFLATE text/plain 
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
 
    # Level of compression (Highest 9 - Lowest 1)
    DeflateCompressionLevel 9                     #壓縮比,默認爲6
     
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
     
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
     
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
1九、資源限定

軟限制:能夠超出的限制,但僅超出必定時長;

硬限制:絕對不能超出的限制

使用 ulimit 能夠修改軟限制:

-n [N]: 顯示或限定能打開的最大的文件句柄數;

-u [N]: 所可以運行的最多進程數;

其相對應的配置文件爲:/etc/security/limits.conf,擴展配置:/etc/security/limits.d/*.conf

root@tianfeiyu # vim /etc/security/limits.conf #設定硬限制
apache hard nofile   65535  #設定能打開的最大文件數
apache hard nproc 30000#設定能打開的最大進程數
20、httpd程序包自帶的工具介紹

httpd:Apache 服務器。

apachectl:Apache HTTP 服務器控制工具。

ab:Apache HTTP 服務器性能基準工具。

apxs:Apache 擴展工具。

configure:配置源代碼。

dbmmanage:爲基本認證建立和更新 DBM 格式的用戶認證文件。

htcacheclean:清理磁盤緩存。

htdigest:爲摘要認證建立和更新用戶認證文件。

htdbm:操做 DBM 密碼數據庫。

htpasswd:爲基本認證建立和更新用戶認證文件。

httxt2dbm:爲 RewriteMap 建立 dbm 文件。

logresolve:將 Apache 日誌文件中的 IP 地址解析到主機名稱。

rotatelogs:不關閉 Apache 而切換日誌文件。

suexec:執行外部程序前切換用戶。

運行目錄:/etc/httpd

配置文件:

主配置:/etc/httpd/conf/httpd.conf

擴展配置:/etc/httpd/conf.d/*.conf

Socket: 80/tcp, 443/tcp

文檔根目錄:/var/www/html

CGI目錄:/var/www/cgi-bin/
MPM(Multipath Processing Module):多道處理模塊,非一個模塊,而是對一種特性的稱謂

多進程模型 prefork: 一個進程響應一個請求(主進程建立進程響應)

多線程模型 worker: 一個主進程多個子進程,一個進程生成多個線程,一個線程響應一個請求,一個進程生成的線程數有限

事件模型 event: 一個線程響應多個請求,基於事件驅動機制來維持多個用戶請求;

event-driven: 事件驅動,主要目的在於實現單線程響應多個請求;

httpd配置目錄信息:服務腳本:/etc/rc.d/init.d/httpd腳本配置文件:/etc/sysconfig/httpd
高度模塊化:DSO(Dynamic Shared Object)動態化裝飾模塊

MPM(Multipath Processing Module):多道處理模塊,非一個模塊,而是對一種特性的稱謂

本文轉載地址:https://www.linuxprobe.com/httpd-2-configure.html

免費提供最新Linux技術教程書籍,爲開源技術愛好者努力作得更多更好:http://www.linuxprobe.com/

相關文章
相關標籤/搜索