httpd2.4版本的葵花寶典

httpd用來實現http協議的,可用來搭建web服務器的應用程序。下面就針對搭建web服務器的各類配置進行一一描述。html

使用的操做系統爲centos7.2web


修改監聽的ip端口數據庫

Listen [ip:]portapache

注意: 1>. Listen 默認監聽在本機上的全部ip地址之上vim

  2>. 可定義多個接聽端口。centos

編輯地方:安全

Listen 127.0.0.1:80

測試結果:  192.168.203.157爲服務器另一個ip地址bash

[root@centos 7 html]# curl http://192.168.203.157  
curl: (7) Failed connect to 192.168.203.157:80; Connection refused
[root@centos 7 html]# curl http://127.0.0.1
magedu.com


編輯地方:服務器

Listen 80
Listen 8080

測試結果:dom

[root@centos 7 html]# curl http://192.168.203.157
magedu.com
[root@centos 7 html]# curl http://192.168.203.157:8080
magedu.com


設置是否持久鏈接:

判斷是否爲持久鏈接:

1>. 首先telnet命令使用驗證服務器當前支持的鏈接狀態:

[root@centos6 ~]# telnet 192.168.203.157 80
Trying 192.168.203.157...
Connected to 192.168.203.157.
Escape character is '^]'.
GET /index.htmlhttp/1.1
Host: 192.168.203.157
 
HTTP/1.1 200 OK
Date: Thu, 29 Sep 2016 12:57:50 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 29 Sep 2016 12:36:35 GMT
ETag: "b-53da4ba7495b0"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
 
magedu.com
Connection closed by foreign host.

客戶端接收到數據後,等待一會時間鏈接關閉,說明當前服務器支持的是長鏈接,只是有時間限制。


修改配置文件:

第一種狀況:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive off


第二種狀況:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive on


第三種狀況(第二種狀況的擴展):

]# vim keepalive.conf 
KeepAlive on
KeepAliveTimeout 20   //  請求時間超過20秒,則斷開鏈接,默認秒爲單位
MaxKeepAliveRequests 10 // 請求資源數量超過10個的話,則斷開連接


DSO(動態的裝載和卸載模塊文件)

配置文件:/etc/httpd/conf.modules.d/

模塊文件都被寫入到/etc/httpd/conf.modules.d/*.conf文件中

httpd2.4版本管理模塊的的配置文件都放在/etc/httpd/conf.modules.d/*.conf文件,而httpd2.2配置文件則放到/etc/httpd/modules/*.so文件

好比:

vim /etc/httpd/conf.modules.d/00-lua.conf
LoadModule lua_module modules/mod_lua.so

httpd默認是加載lua這個模塊的。

[root@centos 7 conf.modules.d]# httpd -M | grep lua
 lua_module (shared)

/etc/httpd/conf.modules.d/00-lua.conf中這一條目註釋後,再去查看。

vim /etc/httpd/conf.modules.d/00-lua.conf
#LoadModule lua_module modules/mod_lua.so

從新加載httpd程序。

systemctl reload httpd
httpd -M | grep lua

httpd並無加載mod_lua這一模塊。


日誌文件配置

日誌文件有兩種類型:錯誤日誌error_log、訪問日誌access_log

error_log   錯誤日誌文件被定義在/etc/httpd/conf/httpd.conf文件中,且日誌的級別爲warn

access_log  文件的特別有用,在生產壞境下,能夠分析到訪問源的ip地址、從哪裏跳轉來等.

access_log很是有用,因此在實際生產壞境下,常常要本身特定日誌的格式.


官方站點解析:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat

access_log日誌中各參數表示的意思:

%h:訪問源ip地址

%l:.....

%u:.....

%t: time 訪問的時間

\  \爲轉移字符,表示

%r: First line of request.

%>s:  記錄最後一次的狀態碼    

%s: 第一次狀態碼

%{VARNAME}i:......

%{Referer}i: 從哪裏跳轉來。


使用本地官方站點文件

1>. 安裝httpd-manual安裝包。

2>. 重載服務。

經過http://ip/manual  來實現對官方文檔的訪問


DocumentRoot的配置

在httpd2.4版本,指定新的DocumentRoot後,必須再去指定相應目錄的參數選項才能夠。

DocumentRoot "/website/html"
<Directory "/website/html">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

在httpd2.2版本,指定新的DocumentRoot後,不須要指定目錄的參數選項。

 

目錄中經常使用選項總結:

(1) Options:用於定義資源的展現方式; 後跟以空白字符分隔的「選項」列表

子選項:

        Indexes (Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews)

        None

        All

注意:

1>.Indexes當系統沒有給定相應的首頁文件的話,會將DocumentRoot指定的目錄中文件以列表的形式展現出來。

2>.Indexes有必定的安全的漏洞,在生產壞境下建議使用None功能將此功能關閉

 

(2) AllowOverride:httpd容許在網頁文檔的各目錄下使用隱藏文件.htaccess來各自的訪問控制;此指令定義哪此指令能夠在.htaccess中定義

AllowOverride的各個選項:

FileInfo AuthConfig Limit

None

All

注意: Options也有安全漏洞,建議使用None選項將此功能關閉


(3) Require:

容許全部客戶端訪問:Require all granted

拒絕全部客戶端訪問:Require all denied


另一種表示的方法:

<RequireAll>

Require ip 10.1.0.0/16

Require all denied

</RequireAll>


控制特定的客戶端訪問:

Require ip IP|NETWORK

Require not ip IP|NETWORK


Require host HOSTNAME

Require not  host HOSTNAME

HOSTNAME的表示方法:FQDN.或則是domain.tld.


定義站點主頁面:

<IfModule dir_module>
    DirectoryIndex default.html
</IfModule>


路徑別名

編輯配置文件/etc/httpd/conf/httpd.conf

 Alias /myweb/ /website/myweb/
 <Directory "/website/myweb/">
    AllowOverride None
    Require all granted
</Directory>

 測試:

wKioL1fzUfzDMz9GAAAyfUkk0zQ514.png


虛擬主機:

虛擬主機的實現能夠基於ip、端口、主機名稱實現虛擬主機。

第一種: 基於ip地址實現虛擬主機.

步驟: 給網卡添加一個別名地址

#ip a add 192.168.203.200 dev eno33554984
#ip a
inet 192.168.203.157/24 brd 192.168.203.255 scope global eno33554984
     valid_lft forever preferred_lft forever
inet 192.168.203.200/32 scope global eno33554984
     valid_lft forever preferred_lft forever


修改配置文件: vhost_ip.conf

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.200:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

測試結果:

wKiom1fzUt-ThG9pAAA***kH4to308.png

wKioL1fzUu3Cl9Y5AAAtwlmh4Ig676.png


第二種狀況:基於端口實現虛擬主機:

修改配置文件:

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.157:8080>
    DocumentRoot "/vhost/www3/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www3/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>


測試結果:

wKioL1fzU1Gi3B18AAArmOWCvtc536.png

wKiom1fzU16Qc8IBAAAwILkaYdI635.png


第三種狀況: 基於ServerName實現虛擬主機(這個是最經常使用的)

配置文件的修改:

<VirtualHost *:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost *:80>
    DocumentRoot "/vhost/www3/html"
    ServerName www3.magedu.com
    <Directory "/vhost/www3/html">
        Options None
        AllowOverride None

測試結果:

wKiom1fzU6PCnHaUAAAPtkFVQlE336.png



status頁面 (查看服務器的狀態頁面信息)

[root@centos 7 conf.d]# vim status.conf

<Location /status>

SetHandler server-status

Requireall granted

</Location>

測試頁面:

wKioL1fzVB6B5P0TAAB3JFCYzr8144.png


MPM: prework worker event ...

httpd主要的工做模式prework.

由於Linux系統下進程和線程的輕量級差很少。因此worker模式效果並非很好

event還不是很穩定,因此生產線上使用prework工做模式。


如何修改httpd的工做模式.

這三種模式被修改成被作成內核模塊。 只要加載相應的內核模塊就OK了。

/etc/httpd/conf.modules.d/00-mpm.conf 模塊中有三種模式。 註釋或則起做用就OK了。
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
 
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module moules/mod_mpm_worker.so
 
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so


這三種模式有許多參數:

prefork
ServerLimit      主進程最多可開啓進程數
StartServers     服務開啓後, 開啓多少個子進程
MinspareServers   至少有多少個進程空閒
MaxSpareServers   最多有多少個進程空閒
MaxConnectionsPerchild    一個進程處理多少個請求後,殺掉,產生一個新的進程
MaxRequestWorkers   最多有多少個鏈接請求


worker:
ServerLimit
StartServers
MinSpareThreads
MaxSpareThreads
MaxRequestWorkers
ThreadsPerChild


event:
ThreadsPerChild
MaxRequestWorkers
AsyncRequestWorkerFactor


修改配置文件:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

StartServers 5

MinspareServers 3

MaxSpareServers 15

MaxConnectionsPerChild 0

MaxRequestWorkers 50


用戶認證:

httpd認證分爲表單認證和http協議的認證。

表單認證就是咱們互聯網上瀏覽網頁常常遇到的,須要提供帳號和密碼。由服務器端的應用程序提供。


http協議認證:

認證質詢:

WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求客戶提供帳號和密碼;

認證:

Authorization:客戶端填入帳號和密碼後再次發送請求報文 ,認證經過後,服務端將響應請求的資源;

認證的方式有兩種:

basic:明文

digest:摘要

虛擬帳號:僅用於訪問某服務使用。

用戶信息存儲於何處:文本文件、SQL數據庫、ldap目錄中。

 

基於basic認證明例:

基於用戶身份認證:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your name/password."
    AuthUserFile "/etc/httpd/.htpasswd"
    Require valid-user
</Directory>


認證文件的生成:

htpasswd -c -m /etc/httpd/.htpasswd jack

htpasswd -m /etc/httpd/.htpasswd bob

 

基於組的認證:

配置文件:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your admin,admin_user"
    AuthUserFile "/etc/httpd/.htpasswd"
    AuthGroupFile "/etc/httpd/.grouppasswd"
    Require group admin
</Directory>


組認證是否是單純的驗證組信息,而是要結合用戶驗證來進行。


worker進程的運行者身份的驗證:

User apache
Group apache


進程運行者和運行的所屬組都是apache, 這樣其實也比較好。

即便***截獲了httpd的服務, 也只能得到httpd用戶的權限,對整個系統構成不了毀滅性的破壞。

也不介意將網頁文件的所屬組或則所屬者修改成httpd。這樣通常文件能夠隨意刪除網頁文件,這樣其實也很差。

相關文章
相關標籤/搜索