httpd安裝和基本配置


Httpd 安裝

版本:

CentOS 6: 2.2
CentOS 7: 2.4

安裝方式:

rpm:centos發行版,穩定,建議使用
編譯:定制或特殊需求

CentOS 7程序環境:httpd-2.4(rpm安裝)

配置文件:

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

檢查配置語法:

httpd –t

Httpd 程序環境

服務單元文件:

/usr/lib/systemd/system/httpd.service

配置文件:

/etc/sysconfig/httpd
/etc/httpd/conf.d/*

服務控制和啟動:

systemctl enable|disable httpd.service
systemctl {start|stop|restart|status|reload} httpd.service

默認站點網頁文檔根目錄:

/var/www/html

模塊文件路徑:

/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:

/usr/sbin/httpd

主進程文件:

/etc/httpd/run/httpd.pid

日志文件目錄:

/var/log/httpd
access_log: 訪問日志
error_log:錯誤日志

Httpd 常見配置

httpd主配置文件的組成:

 
Global Environment
Main server configuration
virtual host
配置格式:directive value
  directive
    注意,不區分字符大小寫
   value
    注意,為路徑時,是否區分大小寫,取決於文件系統

官方幫助

http://httpd.apache.org/docs/2.4/
 
 

1、顯示服務器版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full 
建議使用:ServerTokens Prod。默認為ServerTokens Full
 

2、修改監聽的IP和Port 

Listen [IP:]PORT
(1) 省略IP表示為本機所有IP
(2) Listen指令至少一個,可重復出現多次
Listen 80
Listen 8080

3、持久連接

Persistent Connection:連接建立,每個資源獲取完成后不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接
斷開條件:時間限制:以秒為單位, 默認5s,httpd-2.4 支持毫秒級
副作用:對並發訪問量大的服務器,持久連接會使有些請求得不到響應
設置:KeepAlive On|Off
   KeepAliveTimeout 15
測試:telnet WEB_SERVER_IP PORT
GET URL HTTP/1.1
Host: WEB_SERVER_IP

4、DSO: Dynamic Shared Object

加載動態模塊配置,不需重啟即生效
配置指定實現模塊加載格式:
LoadModule <mod_name> <mod_path>
模塊文件路徑可使用相對路徑:相對於ServerRoot(默認/etc/httpd)
示例:LoadModule auth_basic_module modules/mod_auth_basic.so
動態模塊路徑: /usr/lib64/httpd/modules/
查看靜態編譯的模塊
httpd -l
查看靜態編譯及動態裝載的模塊
httpd –M

5、MPM( Multi-Processing Module)多路處理模塊

三種:prefork, worker, event
切換使用的MPM,默認使用的是prefork。
/etc/httpd/conf.modules.d/00-mpm.conf
取消注釋要啟用的MPM相關的LoadModule指令即可。注意需要重啟httpd。

prefork的配置:

StartServers  8
MinSpareServers  5
MaxSpareServers  20
ServerLimit  256 最多進程數,最大值 20000
MaxClients  256 最大的並發連接數
MaxRequestsPerChild  4000 子進程最多能處理的請求數量。在處理MaxRequestsPerChild  個請求之后,子進程將會被父進程終止,這時候子進 程占用的內存就會釋放(為0時永遠不釋放)

worker的配置:

ServerLimit 16  啟動進程上限
StartServers 2  httpd啟動后開啟的進程數,默認為3
MaxRequestWorkers 150 最大並發數
MinSpareThreads 25  每個進程的最小空閑線程數
MaxSpareThreads 75  每個進程的最大空閑線程數
ThreadsPerChild 25 每個進程開啟的線程數

6、定義'Main' server的文檔頁面路徑

DocumentRoot “/path” 。path默認路徑為/var/www/html
文檔路徑映射:
DocumentRoot指向的路徑為URL路徑的起始位置
示例:
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
/etc/httpd/conf.d/common.conf
documentroot /app/data directoryindex index1.html <directory /app/data> allowoverride none require all granted </directory>
mkdir /app/data
echo "/app/data/index1.html" > /app/data/index1.html

7、定義站點主頁面

DirectoryIndex index.html
 

8、站點訪問控制常見機制

可基於兩種機制指明對哪些資源進行何種訪問控制
訪問控制機制:
  客戶端來源地址,用戶賬號
(1)文件系統路徑:
<Directory “/path">
...
</Directory>
 
<File “/path/file”>
...
</File>
<FileMatch "PATTERN">
...
</FileMatch>
(2)URL路徑:
<Location "">
...
</Location>
<LocationMatch "">
...
</LocationMatch>

9、<Directory>中“基於源地址”實現訪問控制

(1) Options:后跟1個或多個以空白字符分隔的選項列表
在選項前的+,- 表示增加或刪除指定選項
常見選項:
  Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶,建議不要使用。
  FollowSymLinks:允許訪問符號鏈接文件所指向的源文件
  None:全部禁用
  All: 全部允許
(2) AllowOverride
與訪問控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName指定)文件中,覆蓋之前的配置指令。只對<directory>語句有效。
AllowOverride All: #.htaccess中所有指令都有效
AllowOverride None: #.htaccess 文件無效
AllowOverride AuthConfig #.htaccess 文件中,除了AuthConfig 其它指令都無法生效
(3) 基於IP的訪問控制:
無明確授權的目錄,默認拒絕
允許所有主機訪問:Require all granted
拒絕所有主機訪問:Require all denied
控制特定的IP訪問:
  Require ip IPADDR:授權指定來源的IP訪問
  Require not ip IPADDR:拒絕特定的IP訪問
控制特定的主機訪問:
  Require host HOSTNAME:授權特定主機訪問
  Require not host HOSTNAME:拒絕
HOSTNAME:
  FQDN:特定主機
  domin.tld:指定域名下的所有主機
示例
<RequireAll> #不能有失敗,至少有一個成功匹配才成功,即失敗優先 
Require all granted
Require not ip 172.16.1.1 拒絕特定IP
</RequireAll>
 
<RequireAny> #多個語句有一個成功,則成功,即成功優先
Require all denied
require ip 172.16.1.1 允許特定IP
</RequireAny>

實驗一:實現基於.htacces的訪問控制

 /app/data/.htaccess 
<RequireAll> 
Require all granted
Require not ip 192.168.206.20    ##拒絕20訪問192.168.206.15主機
</RequireAll>

10、日志設定

日志類型:
  訪問日志、錯誤日志
錯誤日志
  ErrorLog logs/error_log
  LogLevel warn
  LogLevel 可選值: debug, info, notice, warn,error, crit, alert, emerg。后邊的比前邊的就級別高,越高記錄的內容越少。
訪問日志:
定義日志格式:LogFormat format strings
  LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" testlog
使用日志格式:
  CustomLog logs/access_log testlog
參考幫助:
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
%h 客戶端IP地址
%l 遠程用戶,啟用mod_ident才有效,通常為減號“-%u 驗證(basic,digest)遠程用戶,非登錄訪問時,為一個減號“-%t 服務器收到請求時的時間
%r First line of request,即表示請求報文的首行;記錄了此次請求的“方法”,“URL”以及協議版本
%>s 響應狀態碼
%b 響應報文的大小,單位是字節;不包括響應報文http首部
%{Referer}i 請求報文中首部“referer”的值;即從哪個頁面中的超鏈接跳轉至當前頁面的
%{User-Agent}i 請求報文中首部“User-Agent”的值;即發出請求的應用程序

11、設定默認字符集

AddDefaultCharset UTF-8 此為默認值
中文字符集:GBK, GB2312, GB18030

12、定義路徑別名

格式:Alias /URL/ "/PATH/"。路徑別名和命令別名相類似。alias ll='ls -l --color=auto' ,執行ll就等同於ls -l --color=auto。等於是命令的替換,同理路徑別名也是路徑的替換。如下
DocumentRoot "/www/htdocs"
  http://www.magedu.com/download/bash.rpm
    ==>/www/htdocs/download/bash.rpm
Alias /download/ "/rpms/pub/"
  http://www.magedu.com/download/bash.rpm #直接將download替換為rpms/pub即可。
    ==>/rpms/pub/bash.rpm
  http://www.magedu.com/images/logo.png
    ==>/www/htdocs/images/logo.png

13、基於用戶的訪問控制

認證質詢:WWW-Authenticate:響應碼為401,拒絕客戶端請求,並說明要求客戶端提供賬號和密碼
認證:Authorization:客戶端用戶填入賬號和密碼后再次發送請求報文;認證通過時,則服務器發送響應的資源
認證方式兩種:
  basic:明文
  digest:消息摘要認證,兼容性差
安全域:需要用戶認證后方能訪問的路徑;應該通過名稱對其進行標識,以便於告知用戶認證的原因
用戶的賬號和密碼
  虛擬賬號:僅用於訪問某服務時用到的認證標識
  存儲:文本文件,SQL數據庫,ldap目錄存儲,nis等

基於用戶認證配置示例:

(1) 定義安全域
<Directory “/path">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
Require |valid-user|user username1 username2 ...
</Directory>
Require valid-user允許賬號文件中的所有用戶登錄訪問:
Require user username1 username2 ... 允許賬號文件中的指定用戶登錄訪問:
(2) 提供賬號和密碼存儲(文本文件)
使用專用命令完成此類文件的創建及用戶管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自動創建文件,僅應該在文件不存在時使用
-p:明文密碼
-d:CRYPT格式加密,默認
-m:md5格式加密
-s:sha格式加密
-D:刪除指定用戶

基於組賬號進行認證

(1) 定義安全域
<Directory “/path">
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
(2) 創建用戶賬號和組賬號文件
組文件:每一行定義一個組
GRP_NAME: username1 username2 ...

實驗二實現基於文件的用戶認證

/etc/httpd/conf.d/common.conf
<Directory "/app/data">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/etc/httpd/conf.d/user_auth.txt"
Require valid-user
</Directory>
創建密碼文件
htpasswd -c /etc/httpd/conf.d/user_auth.txt test1
htpasswd  /etc/httpd/conf.d/user_auth.txt test2

14、實現用戶家目錄的http共享

此功能,基於模塊mod_userdir.so實現
相關設置:
vim /etc/httpd/conf.d/userdir.conf
  <IfModule mod_userdir.c>
  #UserDir disabled
  UserDir public_html #指定共享目錄的名稱
  </IfModule>
准備目錄
su – test;mkdir ~/public_html
setfacl –m u:apache:x ~test
訪問
http://localhost/~test/index.html

實驗三:實現用戶家目錄的http共享

/etc/httpd/confi.d/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
Require method GET POST OPTIONS
</Directory>

useradd test
su - test
mkdir public_html
setfacl  -m u:apache:x ~test
echo home > public_html/index.html

 

15、ServerSignature On | Off | EMail

當客戶請求的網頁並不存在時,服務器將產生錯誤文檔,如果打開了ServerSignature選項,錯誤文檔的最后一行將包含服務器的名字、Apache的版本等信息,如果不對外顯示這些信息,就可以將這個參數設置為Off設置為Email,將顯示ServerAdmin 的Email提示。
 
 

 16、status頁面

LoadModule status_module modules/mod_status.so
<Location "/status">
SetHandler server-status
</Location>
ExtendedStatus On 顯示擴展信息
實驗四:打開狀態頁
/etc/httpd/conf.d/common.conf
<Location "/status">
 SetHandler server-status
 require all granted
</Location>

 

 本章內容的配置文件common.conf內容如下

servertokens prod
KeepAlive On
KeepAliveTimeout 15
LoadModule auth_basic_module "modules/mod_auth_basic.so"
documentroot /app/data
directoryindex  index1.html
logFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" testlog
CustomLog logs/access_log testlog
<Directory "/app/data">
Options None
AllowOverride None
require all granted
#AuthType Basic
#AuthName "String“
#AuthUserFile "/etc/httpd/conf.d/user_auth.txt"
#Require valid-user
</Directory>
ServerSignature off
<Location "/status">
 SetHandler server-status
 require all granted
</Location>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM