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>
測試:
虛擬主機:
虛擬主機的實現能夠基於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>
測試結果:
第二種狀況:基於端口實現虛擬主機:
修改配置文件:
<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>
測試結果:
第三種狀況: 基於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
測試結果:
status頁面 (查看服務器的狀態頁面信息)
[root@centos 7 conf.d]# vim status.conf
<Location /status>
SetHandler server-status
Requireall granted
</Location>
測試頁面:
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。這樣通常文件能夠隨意刪除網頁文件,這樣其實也很差。