溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

七、Web服務(wù)器Apache的配置和管理

發(fā)布時(shí)間:2020-04-07 03:29:43 來源:網(wǎng)絡(luò) 閱讀:4388 作者:少年不在了 欄目:建站服務(wù)器

  萬維網(wǎng)Web,是在Internet上以超文本為基礎(chǔ)形成的信息網(wǎng)。用戶通過瀏覽器可以訪問Web服務(wù)器上的信息資源,目前在Linux操作系統(tǒng)上最常用的Web服務(wù)器軟件是Apache。Apache是一種開源的HTTP服務(wù)器軟件,可以在包括UNIX、Linux以及Windows在內(nèi)的大多數(shù)主流計(jì)算機(jī)操作系統(tǒng)中運(yùn)行。

7.1、Apache簡介

  Apache是一款開源軟件,所以得到了開源社區(qū)支持,不斷開發(fā)出新的功能特性,并修補(bǔ)了原來的缺陷 。經(jīng)過多年來不斷的完善,如今的Apache已經(jīng)是最流行的Web服務(wù)器端軟件之一。Apache擁有以下眾多的

特性,保證它可以高效穩(wěn)定地運(yùn)行。

1.支持最新的HTTP/1.1通信協(xié)議

2.擁有簡單而強(qiáng)有力的基于文件的配置過程

3.支持通用網(wǎng)關(guān)接口CGI

4.支持基于IP和基于域名的虛擬主機(jī)

5.支持多種方式的HTTP認(rèn)證

6.集成Perl處理模塊

7.集成代理服務(wù)器模塊

8.支持實(shí)時(shí)監(jiān)視服務(wù)器狀態(tài)和定制服務(wù)器日志

9.支持服務(wù)器端包含指令(SSI)

10.支持安全Socket層(SSL)

11.提供用戶會話過程的跟蹤

12.支持FastCGI

13.通過第三方模塊可以支持JavaServlets

  Apache采用模塊化的設(shè)計(jì),模塊安裝后就可以為Apache內(nèi)核增加相應(yīng)的新功能。默認(rèn)情況下Apache已經(jīng)安裝部分模塊,用戶也可以使用模塊配置,自定義Apache服務(wù)器中需要安裝哪些功能,這正是Apache靈活性的表現(xiàn)。常見的功能模塊有:

模塊名功能說明
mod_actions.so運(yùn)行基于MIME類型的CGI腳本
mod_alias.so 支持虛擬目錄和頁面重定向
mod_asis發(fā)送包含自定義HTTP頭的文件
mod_auth_basic.so基本驗(yàn)證
mod_auth_digest.so使用MD5加密算法的用戶認(rèn)證
mod_authn_alias.so 允許使用第三方驗(yàn)證
mod_authn_anon.so 允許匿名用戶訪問認(rèn)證的區(qū)域
mod_authn_dbd.so使用數(shù)據(jù)庫保存用戶驗(yàn)證信息
mod_authn_dbm.so 使用DBM數(shù)據(jù)文件保存用戶驗(yàn)證信息
mod_authn_default.so處理用戶驗(yàn)證失敗
mod_authn_file.so 使用文本文件保存用戶驗(yàn)證信息
mod_authnz_ldap.so使用LDAP目錄進(jìn)行用戶驗(yàn)證
mod_authz_default.so 處理組驗(yàn)證失敗
mod_authz_groupfile.so使用plaintext文件進(jìn)行驗(yàn)證
mod_authz_host.so基于主機(jī)的組驗(yàn)證
mod_authz_user.so 用戶驗(yàn)證模塊
mod_autoindex.so  生成目錄索引
mod_cache.so通向URI的內(nèi)容緩存
mod_cgi.so支持CGI腳本
mod_cgid.so使用外部CGI進(jìn)程運(yùn)行CGI腳本
mod_dir.so提供用于trailing slash的目錄和索引文件
mod_env.so調(diào)整傳輸個給CGI腳本和SSI頁面的環(huán)境變量
mod_example.so
解釋Apache模塊的API
mod_filter.so 過濾信息
mod_imagemap.so
imagemap處理
mod_include.so解析HTML文件
mod_isapi.so
ISAPI擴(kuò)展
mod_ldap.so使用第三方LDAP模塊進(jìn)行LDAP連接和服務(wù)
mod_log_config.so
記錄發(fā)給服務(wù)器的訪問請求
mod_login.so
記錄每個請求輸入、輸出的字節(jié)數(shù)
mod_mime.so聯(lián)合被請求文件擴(kuò)展名和文件行為的內(nèi)容
mod_negotiation.so提供內(nèi)容協(xié)商
mod_nw_ssl
為NetWare打開SSL加密
mod_proxy.so支持HTTP1.1協(xié)議的代理和網(wǎng)關(guān)服務(wù)器
mod_proxy_ajp.somod_proxy的AJP支持模塊
mod_proxy_balancer.somod_proxy的負(fù)載均衡模塊
mod_proxy_ftp.somod_proxy的ftp支持模塊
mod_proxy_http.somod_proxy的HTTP支持模塊
mod_setenvif.so允許設(shè)置基于請求的環(huán)境變量
mod_so.so
在啟動或重啟時(shí)提高可執(zhí)行編碼和模塊的啟動
mod_ssl.so
使用SSL和TLS的加密
mod_status.so提供服務(wù)器性能運(yùn)行信息
mod_userdir.so設(shè)置每個用戶的網(wǎng)站目錄
mod_usertrack.so記錄用戶在網(wǎng)站上的活動
mod_vhost_alias.so提供大量虛擬主機(jī)的動態(tài)配置

7.2、Apache服務(wù)器的安裝

  對于Centos6.5,在yum源中有自帶的Apache,版本為2.2.15,可以直接通過yum命令進(jìn)行安裝。為了能夠獲得最新版本的Apache時(shí),可以通過Apache官方網(wǎng)站www.apache.org下載該軟件的源代碼進(jìn)行安裝,其軟件名稱為httpd,當(dāng)前最新穩(wěn)定版本為2.4.25。

[root@mylinux home]# yum list httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.cn99.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * epel-debuginfo: mirrors.tuna.tsinghua.edu.cn
 * epel-source: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.njupt.edu.cn
 * updates: ftp.sjtu.edu.cn
Available Packages
httpd.x86_64                          2.2.15-59.el6.centos                         base
[root@mylinux home]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.25.tar.bz2
--2017-05-26 06:32:59--  http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.25.tar.bz2
Resolving mirror.bit.edu.cn... 202.204.80.77, 2001:da8:204:2001:250:56ff:fea1:22
Connecting to mirror.bit.edu.cn|202.204.80.77|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6398218 (6.1M) [application/octet-stream]
Saving to: httpd-2.4.25.tar.bz2

100%[======================================================>] 6,398,218   1.11M/s   in 5.9s    

2017-05-26 06:33:07 (1.04 MB/s) - httpd-2.4.25.tar.bz2 saved [6398218/6398218]

[root@mylinux home]# ls
bind-9.10.4-P8         httpd-2.4.25.tar.bz2  Python-2.7.13.tar.xz  Python-3.6.1.tar.xz
bind-9.10.4-P8.tar.gz  mylinux               Python-3.6.1
[root@mylinux home]# ls httpd-2.4.25.tar.bz2

1、安裝依賴文件

[root@mylinux httpd-2.4.25]# yum remove apr-util-devel apr apr-util-mysql apr-docs apr-devel apr-util apr-util-docs
...
Removed:
  apr.x86_64 0:1.3.9-5.el6_2                  apr-util.x86_64 0:1.3.9-3.el6_0.1        
Dependency Removed:
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1        httpd-tools.x86_64 0:2.2.15-59.el6.centos       
  subversion.x86_64 0:1.6.11-15.el6_7          
Complete!

[root@mylinux home]# wget 
[root@mylinux home]# wget 
[root@mylinux home]# wget 

[root@mylinux home]# tar xf apr-1.5.2.tar.gz        #解決apr not found問題
[root@mylinux home]# cd apr-1.5.2
[root@mylinux apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@mylinux apr-1.5.2]# make && make install

[root@mylinux home]# tar xf apr-util-1.5.4.tar.gz   #解決APR-util not found問題
[root@mylinux home]# cd apr-util-1.5.4
[root@mylinux apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config 
[root@mylinux apr-util-1.5.4]# make && make install

[root@mylinux home]# tar xf pcre-8.40.tar.bz2       #解決pcre問題
[root@mylinux home]# cd pcre-8.40
[root@mylinux pcre-8.40]# ./configure --prefix=/usr/local/pcre
[root@mylinux pcre-8.40]# make && make install

[root@mylinux home]#yum install pcre-devel -y

2、編譯安裝httpd

[root@mylinux home]# tar xf httpd-2.4.25.tar.bz2
[root@mylinux home]# cd httpd-2.4.25
[root@mylinux httpd-2.4.25]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event
[root@mylinux httpd-2.4.25]make && make install

#導(dǎo)出頭文件
[root@mylinux httpd-2.4.25]# ln -sv /usr/local/apache/include /usr/include/httpd
`/usr/include/httpd' -> `/usr/local/apache/include'
  
#導(dǎo)出庫文件
[root@mylinux httpd-2.4.25]# ldconfig 
[root@mylinux httpd-2.4.25]# ldconfig  -p    #查看當(dāng)前系統(tǒng)庫文件
326 libs found in cache `/etc/ld.so.cache'
        libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
        libz.so (libc6,x86-64) => /usr/lib64/libz.so
        libyaml-0.so.2 (libc6,x86-64) => /usr/lib64/libyaml-0.so.2
        libxtables.so.4 (libc6,x86-64) => /lib64/libxtables.so.4
        libxslt.so.1 (libc6,x86-64) => /usr/lib64/libxslt.so.1
        libxml2.so.2 (libc6,x86-64) => /usr/lib64/libxml2.so.2
...

導(dǎo)出man手冊#vim /etc/man.config 
[root@mylinux httpd-2.4.25]# vim /etc/man.config
...
MANPATH      /usr/local/apache/man/   #添加該行

輸出二進(jìn)制程序
[root@mylinux httpd-2.4.25]# vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH
[root@mylinux httpd-2.4.25]# source /etc/profile.d/httpd.sh 

[root@mylinux httpd-2.4.25]# apachectl start    #啟動
AH00557: httpd: apr_sockaddr_info_get() failed for mylinux
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

[root@mylinux httpd-2.4.25]# apachectl stop      #關(guān)閉
AH00557: httpd: apr_sockaddr_info_get() failed for mylinux
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

#解決錯誤信息的方法
[root@mylinux etc]# vim /etc/httpd24/httpd.conf 
  修改ServerName www.example.com:80 為 ServerName localhost:80
[root@mylinux etc]# apachectl start             #啟動
[root@mylinux etc]# ps -ef | grep httpd         #檢查進(jìn)程
root     39780     1  0 07:31 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   39781 39780  0 07:31 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   39782 39780  0 07:31 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   39783 39780  0 07:31 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root

3、檢查Apache頁面

七、Web服務(wù)器Apache的配置和管理

7.3、Apache服務(wù)器的基本配置和維護(hù)

  Apache在安裝時(shí)已經(jīng)自動采用了一系列的默認(rèn)設(shè)置,安裝完成后Web服務(wù)器已經(jīng)可以對外提供WWW服務(wù),但為了能夠更好地運(yùn)作,還需要對Apache進(jìn)行一些配置。Apache的主要配置文件為httpd.conf,此外,Apache還提供了相關(guān)的命令以方便管理和配置。

常用的命令有:

httpd:Apache 服務(wù)器。

apachectl:Apache HTTP 服務(wù)器控制工具。

abApache HTTP 服務(wù)器性能基準(zhǔn)工具。

  -c: 模擬的并發(fā)數(shù)-n: 總請求數(shù)

apxs:Apache 擴(kuò)展工具。

configure:配置源代碼。

dbmmanage:為基本認(rèn)證創(chuàng)建和更新DBM 格式的用戶認(rèn)證文件。

htcacheclean:清理磁盤緩存。

htdigest:為摘要認(rèn)證創(chuàng)建和更新用戶認(rèn)證文件。

htdbm:操作 DBM 密碼數(shù)據(jù)庫。

htpasswd:為基本認(rèn)證創(chuàng)建和更新用戶認(rèn)證文件。

httxt2dbm:為 RewriteMap 創(chuàng)建 dbm 文件。

logresolve:將 Apache 日志文件中的 IP 地址解析到主機(jī)名稱。

rotatelogs:不關(guān)閉 Apache 而切換日志文件。

suexec:執(zhí)行外部程序前切換用戶。

   此外測試Apache服務(wù)器是否正常工作,還可以使用curl命令。curl是基于URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協(xié)議。curl支持HTTPS認(rèn)證,并且支持HTTP的POST、PUT等方法, FTP上傳, kerberos認(rèn)證,HTTP上傳,代理服務(wù)器, cookies, 用戶名/密碼認(rèn)證, 下載文件斷點(diǎn)續(xù)傳,上載文件斷點(diǎn)續(xù)傳,http代理服務(wù)器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務(wù)器,,通過http代理服務(wù)器上傳文件到FTP服務(wù)器等等,功能十分強(qiáng)大。

curl的常用選項(xiàng):

  -A/--user-agent <string> 設(shè)置用戶代理發(fā)送給服務(wù)器

  -basic 使用HTTP基本驗(yàn)證

  --tcp-nodelay 使用TCP_NODELAY選項(xiàng)

  -e/--referer <URL> 來源網(wǎng)址

  --cacert <file> CA證書 (SSL)

  --compressed 要求返回是壓縮的形勢

  -H/--header <line>自定義頭信息傳遞給服務(wù)器

  -I/--head 只顯示響應(yīng)報(bào)文首部信息

  --limit-rate <rate> 設(shè)置傳輸速度

  -u/--user <user[:password]>設(shè)置服務(wù)器的用戶和密碼

  -0/--http1.0 使用HTTP 1.0

查看Apache軟件的版本信息

[root@mylinux bin]# apachectl -V
Server version: Apache/2.4.25 (Unix)
Server built:   May 26 2017 07:07:15
Server's Module Magic Number: 20120211:67
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     event           #工作模式
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/apache"
 -D SUEXEC_BIN="/usr/local/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/httpd24/mime.types"
 -D SERVER_CONFIG_FILE="/etc/httpd24/httpd.conf"

查看已經(jīng)被編譯的模塊

[root@mylinux bin]# apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  • httpd的MPM特性

 httpd采用core + modules模塊化設(shè)計(jì)方法,其中模塊采用DSO(Dynamic Shared Object動態(tài)模塊加載)的方式,具有MPM(Multipath Processing Module,多道處理模塊)特性。其主要有三種工作方式:

  prefork: 一個請求用一個進(jìn)程處理,穩(wěn)定性好、大并發(fā)場景下消耗資源較多;事先創(chuàng)建進(jìn)程,按需維持適當(dāng)?shù)倪M(jìn)程,模塊塊設(shè)計(jì),核心比較小,各種功能都模塊添加(包括php),支持運(yùn)行配置,支持單獨(dú)編譯模塊,支持多種方式的虛擬主機(jī)配置。

  worker: 一個進(jìn)程多個線程,一個線程響應(yīng)一個請求

  event: 一個線程響應(yīng)多個請求,事件驅(qū)動,主要目的在于實(shí)現(xiàn)單線程響應(yīng)多個請求

七、Web服務(wù)器Apache的配置和管理

<IfModule mpm_prefork_module>
  StartServers: 默認(rèn)啟動的工作進(jìn)程數(shù);
  MinSpareServers: 最少空閑進(jìn)程數(shù);
  MaxSpareServers: 最大空閑進(jìn)程數(shù);
  ServerLimit: 最大活動進(jìn)程數(shù);
  MaxClients: 并發(fā)請求的最大數(shù);
  MaxRequestsPerChild: 每個子進(jìn)程在生命周期內(nèi)所能夠服務(wù)的最多請求個數(shù);
</IfModule>

七、Web服務(wù)器Apache的配置和管理

<IfModule mpm_worker_module>
  StartServers:啟動的子進(jìn)程的個數(shù)
  MaxClients: 并發(fā)請求的最大數(shù);
  MinSpareThreads:最小空閑線程數(shù);
  MaxSpareThreads:最大空閑線程數(shù);
  ThreadsPerChild:每個子進(jìn)程可生成的線程數(shù);
  MaxRequestsPerChild:每個子進(jìn)程在生命周期內(nèi)所能夠服務(wù)的最多請求個數(shù)
</IfModule>

七、Web服務(wù)器Apache的配置和管理

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
  • httpd.conf配置文件介紹

  httpd.conf是Apache的配置文件,Apache中的常見配置主要都是通過修改該文件來實(shí)現(xiàn)的,該文件更改后需要重啟Apache服務(wù)使更改的配置生效。

  與Apache網(wǎng)絡(luò)和系統(tǒng)相關(guān)的選項(xiàng):

ServerRoot "/usr/local/apache"     #設(shè)置Apache安裝目錄
Listen 80                          #設(shè)置監(jiān)聽端口
User daemon                        #設(shè)置Apache進(jìn)程的執(zhí)行者
Group daemon                       #設(shè)置Apache進(jìn)程執(zhí)行者所屬的用戶組
ServerAdmin you@example.com        #設(shè)置網(wǎng)站管理員郵箱
ServerName localhost:80            #服務(wù)其主機(jī)與端口

  與Apache文件和目錄權(quán)限相關(guān)選項(xiàng):

<Directory />                             #設(shè)置根目錄權(quán)限
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/usr/local/apache/htdocs"   #設(shè)置網(wǎng)站根目錄
<Directory "/usr/local/apache/htdocs">    #設(shè)置/usr/local/apache/htdocs目錄權(quán)限 
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted
</Directory>
#最終匹配結(jié)果:二者都匹配或二者都無匹配項(xiàng)時(shí),則以后者為準(zhǔn);否則,則以匹配到的為準(zhǔn)
<IfModule dir_module>                     #設(shè)置index.html為首頁
    DirectoryIndex index.html
</IfModule>
<Files ".ht*">                            #.ht*為后綴文件的訪問權(quán)限
    Require all denied
</Files>

常見可用選項(xiàng):

Indexes:        缺少指定的默認(rèn)頁面時(shí),允許將目錄中所有文件以列表形式返回用戶

FollowSymLinks: 允許跟隨符號鏈接所指向的原始文件;

None:           所有都不啟用;

All:            所有都啟用;

ExecCGI:        允許使用mod_cgi模塊執(zhí)行CGI腳本;

Includes:       允許使用mod_include模塊實(shí)現(xiàn)服務(wù)器端包含(SSI);

MultiViews:    允許使用mod_negotiation實(shí)現(xiàn)內(nèi)容協(xié)商;

SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時(shí),允許跟隨符號鏈接所指向的原始文件;

  與Apache日志相關(guān)的選項(xiàng):

ErrorLog "logs/error_log"     #設(shè)置錯誤日志位置
LogLevel warn                 #設(shè)置錯誤日志級別
<IfModule log_config_module>  #設(shè)置訪問日志的格式模板
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common    #設(shè)置訪問日志的位置和格式
</IfModule>
<IfModule alias_module>       #別名設(shè)置
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
</IfModule>
<IfModule cgid_module>
    
</IfModule>
<Directory "/usr/local/apache/cgi-bin"> #設(shè)置/usr/local/apache/cgi-bin目錄權(quán)限
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module>                    #mime模塊的相關(guān)配置
    TypesConfig /etc/httpd24/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule proxy_html_module>    
Include /etc/httpd24/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>                     #ssl模塊的相關(guān)設(shè)置
  SSLRandomSeed startup builtin
  SSLRandomSeed connect builtin
</IfModule>

配置文件的修改

  用戶可以直接通過圖形界面中文件編輯器或者通過vi對配置文件進(jìn)行修改,修改完成后必須重啟Apache服務(wù)器才能使更改生效。如果配置文件中添加了錯誤的參數(shù)或者設(shè)置了錯誤的參數(shù)值,Apache將無法啟動,為了方便用戶驗(yàn)證httpd.conf配置文件的參數(shù)是否配置正確,Apache提供了命令自動完成配置文件的檢查工作。

[root@mylinux httpd24]# apachectl configtest
Syntax OK
  • 符號鏈接和虛擬目錄

  在默認(rèn)情況下,用戶通過http訪問Web服務(wù)器所瀏覽到的所有資料都是存放在DocumentRoot參數(shù)所指定的目錄之下,但該參數(shù)只能指定一個目錄作為參數(shù)值,當(dāng)該目錄空間不足時(shí),要把文件放在其他文件系統(tǒng)時(shí),用戶如何訪問文件呢?Apache提供了來年各種解決辦法。

符號鏈接

  假設(shè)現(xiàn)在的文檔根目錄為/usr/local/apache/htdocs,希望把/usr/share/doc目錄映射成/doc/的訪問路徑。配置過程很簡單,使用ln命令即可。

[root@mylinux httpd24]# cd /usr/local/apache/htdocs/
[root@mylinux htdocs]# ln -s /usr/local/share/ doc
[root@mylinux htdocs]#

七、Web服務(wù)器Apache的配置和管理

虛擬目錄

 使用虛擬目錄是另一種將根目錄以外的內(nèi)容加入到站點(diǎn)中的辦法,例如把/var/log目錄映射成網(wǎng)站根目錄的log下。

[root@mylinux htdocs]# vim /etc/httpd24/httpd.conf
...
<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to 
    # exist in your server's namespace, but do not anymore. The client 
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    Alias /log   "/var/log"                #需要添加的信息
    <Directory "/var/log">
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
    </Directory>
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

    #
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

</IfModule>
...
[root@mylinux htdocs]# apachectl configtest
Syntax OK
[root@mylinux htdocs]# apachectl restart

七、Web服務(wù)器Apache的配置和管理

  • 頁面重定向

 如果用戶經(jīng)常訪問某個頁面,他可能會把頁面的URL添加到收藏夾中,在每次訪問頁面的時(shí)候可以直接單擊收藏夾中的記錄訪問。但是如果網(wǎng)站進(jìn)行了目錄結(jié)構(gòu)的更新后,用戶再使用原來的URL訪問就會出現(xiàn)404頁面無法找到的錯誤,為了方便用戶能繼續(xù)使用原來的URL進(jìn)行訪問,這是就要使用頁面重定向。

  Apache提供了Redirect命令用于配置頁面重定向,命令格式為:

Redirect [HTTP代碼]  用戶請求的URL [重定向后的URL]

  假設(shè)有一個/doc目錄,現(xiàn)在管理員對網(wǎng)站目錄結(jié)構(gòu)進(jìn)行整理,并把/doc目錄移動到/old-doc目錄下,為解決這個問題需要/doc配置頁面重定向。

七、Web服務(wù)器Apache的配置和管理

[root@mylinux old-doc]# vim /etc/httpd24/httpd.conf    #打開配置文件
...
<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to
    # exist in your server's namespace, but do not anymore. The client
    # will make a new request for the document at its new location.
    # Example:
    Redirect 303 /doc       #添加重定向信息
... 
[root@mylinux old-doc]# apachectl configtest
Syntax OK
[root@mylinux old-doc]# apachectl restart

  輸入http://192.168.191.128/doc,回車后自動重定向到了http://192.168.191.128/old-doc。

七、Web服務(wù)器Apache的配置和管理

  • Apache日志文件

  Apache服務(wù)器運(yùn)行后會生成兩個日志文件,分別是access_log(訪問日志)和error_log(錯誤日志),采用默認(rèn)安裝時(shí),這些文件可以在/usr/local/apache/logs目錄下找到。

[root@mylinux extra]# cd /usr/local/apache/logs/
[root@mylinux logs]# ls
access_log  error_log  httpd.pid

訪問日志

  Apache的訪問日志就是記錄Web服務(wù)器的所有訪問活動,每一行記錄了一條訪問記錄,由7個部分組成,其格式為:

客戶端地址 訪問者的標(biāo)識 訪問者的驗(yàn)證名字 請求時(shí)間 請求類型 請求的HTTP代碼 發(fā)送給客戶端的字節(jié)數(shù)

客戶端地址:       表明訪問網(wǎng)站的客戶端IP地址 

訪問者的標(biāo)識:     一般為空白,'-'代替 

訪問者的驗(yàn)證名字: 用于記錄訪問者進(jìn)行身份驗(yàn)證時(shí)提供的名字,一般也為空白

請求時(shí)間:         記錄訪問操作的發(fā)生時(shí)間          

請求類型:         記錄服務(wù)器收到的是一個什么類型請求

請求的HTTP代碼:   該信息可判斷請求是否成功     

發(fā)送給客戶端的字節(jié)數(shù):發(fā)送給客戶端的總字節(jié)數(shù)

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common   #配置日志格式
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" common     #訪問日志的格式
</IfModule>

LogFormat Format_String  Format_Name    #各自段表示的含義

%h: 客戶端地址

%l: 遠(yuǎn)程登錄名,通常為-

%u: 認(rèn)證時(shí)的遠(yuǎn)程用戶名,沒有認(rèn)證時(shí)為-

%t: 收到請求時(shí)的時(shí)間;

%r: 請求報(bào)文的起始行;

%>s: 響應(yīng)狀態(tài)碼;

%b: 響應(yīng)報(bào)文的長度,單位為字節(jié)

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

[root@mylinux logs]# cat access_log 
192.168.191.1 - - [26/May/2017:07:32:23 +0800] "GET / HTTP/1.1" 200 45
192.168.191.1 - - [26/May/2017:07:32:23 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.191.1 - - [02/Jun/2017:04:17:02 +0800] "GET / HTTP/1.1" 200 45
192.168.191.1 - - [02/Jun/2017:04:17:02 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.191.1 - - [02/Jun/2017:04:17:02 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.191.1 - - [02/Jun/2017:04:20:12 +0800] "GET /doc HTTP/1.1" 301 235
192.168.191.1 - - [02/Jun/2017:04:20:12 +0800] "GET /doc/ HTTP/1.1" 200 332
192.168.191.1 - - [02/Jun/2017:04:30:51 +0800] "GET /log HTTP/1.1" 404 201

錯誤日志

  錯誤日志是Apache提供的另一種標(biāo)準(zhǔn)日志,該日志文件記錄了Apache服務(wù)器運(yùn)行過程所發(fā)生的錯誤信息。httpd.conf配置文件提供了兩個配置參數(shù):

ErrorLog "logs/error_log"     #錯誤日志文件
LogLevel warn                 #錯誤日志級別

  錯誤日志級別有以下幾種:

嚴(yán)重程度等級說明
1emerg系統(tǒng)不可用
2alert需要立即引起注意的情況
3
crit危急情況
4
error錯誤信息
5
warn警告信息
6
notice需要引起注意的情況
7
info一般信息
8
debug由運(yùn)行于debug模式的程序輸出的信息

  emerg級別的信息嚴(yán)重程度最高,debug級別最低。如果把錯誤日志設(shè)置成warn級別,則嚴(yán)重程度由1-5的所有錯誤信息都會被記錄下來。

[root@mylinux logs]# cat error_log 
[Fri May 26 07:20:43.874118 2017] [mpm_event:notice] [pid 39580:tid 140405771355904] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
[Fri May 26 07:20:43.874427 2017] [core:notice] [pid 39580:tid 140405771355904] AH00094: Command line: '/usr/local/apache/bin/httpd'
[Fri May 26 07:22:07.002599 2017] [mpm_event:notice] [pid 39580:tid 140405771355904] AH00491: caught SIGTERM, shutting down
[Fri May 26 07:29:51.083928 2017] [mpm_event:notice] [pid 39676:tid 140351188608768] AH00489: Apache/2.4.25 (Unix) configured -- resuming normal operations
[Fri May 26 07:29:51.085382 2017] [core:notice] [pid 39676:tid 140351188608768] AH00094: Command line: '/usr/local/apache/bin/httpd'
[Fri May 26 07:29:57.164059 2017] [mpm_event:notice] [pid 39676:tid 140351188608768] AH00491: caught SIGTERM, shutting down

  從文件內(nèi)容可以看出,每一行記錄一個錯誤,由三部分組成

時(shí)間 錯誤等級 錯誤信息

  7.4、Apache安全配置

  Apache提供了多種安全控制手段,包括設(shè)置Web訪問控制、用戶登錄密碼認(rèn)證以及.htaccess文件等。通過這些技術(shù)手段,可以進(jìn)一步提升Apache服務(wù)器的安全級別,減少服務(wù)器受***或數(shù)據(jù)被竊取的風(fēng)險(xiǎn)。

  • 訪問控制

 設(shè)置訪問控制是提高Apache服務(wù)器安全級別最有效的手段之一。Diretory段用于設(shè)置與目錄相關(guān)的參數(shù)和指令,包括訪問控制和認(rèn)證。

<Directory 目錄的路徑>
    目錄相關(guān)的配置參數(shù)和指令
</Directory>

Allow指令:用于設(shè)置那些客戶端可以訪問Apache

  Allow from [All/全域名/部分域名/IP地址/網(wǎng)絡(luò)地址/CIDR地址]...

    All:表示所有客戶端

    全域名:表示域名對應(yīng)的客戶端,如www.domain.com

    部分域名:表示域名內(nèi)的所有客戶端,如domain.com

    IP地址:如192.168.1.1

    網(wǎng)絡(luò)地址:如172.20.17.0/256.356.355.0

    CIDR地址:如172.20.17.0/24

Deny指令:用于設(shè)置拒絕哪些客戶端訪問Apache

Order指令:用于指定執(zhí)行訪問規(guī)則的先后順序

  Order Allow,Deny :先執(zhí)行允許訪問規(guī)則,在執(zhí)行拒絕訪問規(guī)則

  Order Deny,Allow :先執(zhí)行拒絕訪問規(guī)則,在執(zhí)行允許訪問規(guī)則

  • 用戶認(rèn)證

  Apache的用戶認(rèn)證包括基本認(rèn)證和摘要認(rèn)證。摘要認(rèn)證比基礎(chǔ)認(rèn)證更加安全,但不是所有的瀏覽器都支持摘要認(rèn)證。要使用用戶認(rèn)證,首先要創(chuàng)建保存用戶和密碼的認(rèn)證密碼文件。在Apache中提供了htpasswd命令用于創(chuàng)建和修改認(rèn)證密碼文件。

[root@mylinux httpd24]# htpasswd -c /etc/httpd24/.htpasswd sam   #添加認(rèn)證密碼文件
New password: 
Re-type new password: 
Adding password for user sam
[root@mylinux httpd24]# vim httpd.conf          #添加配置信息
<Directory "/usr/local/apache/htdocs/fin">                   #需要認(rèn)證的目錄
        Options None                     
        AllowOverride AuthConfig
        AuthType Basic                          #認(rèn)證類型
        AuthName "Private Area"
        AuthUserFile /etc/httpd24/.htpasswd     #指明認(rèn)證密碼文件的位置
        Require valid-user
</Directory>    
[root@mylinux httpd24]# apachectl configtest
Syntax OK
[root@mylinux httpd24]# apachectl restart
[root@mylinux fin]# ls                 #fin目錄下的文件
applications  index.html  info  man
[root@mylinux fin]# cat index.html     #index.html文件內(nèi)容
Auth

七、Web服務(wù)器Apache的配置和管理

七、Web服務(wù)器Apache的配置和管理


7.5、虛擬主機(jī)

  虛擬主機(jī)服務(wù)就是指將一臺物理主機(jī)服務(wù)器虛擬成多態(tài)Web服務(wù)器,可以有效節(jié)省硬件資源且方便管理。Apache支撐3種不同的虛擬主機(jī)方式:

基于不同的IP實(shí)現(xiàn)不同的虛擬主機(jī):變化IP

基于不同的port實(shí)現(xiàn)不同的虛擬主機(jī):變化port

基于不同的FQDN實(shí)現(xiàn)不同的虛擬主機(jī):變化ServerName的值

  • 基于IP的虛擬主機(jī)

  基于IP的虛擬主機(jī)服務(wù)商必須同時(shí)設(shè)置有多個IP,服務(wù)器根據(jù)用戶請求目的的IP地址來判定用戶請求的那個虛擬主機(jī)。在使用虛擬主機(jī)時(shí),必須要關(guān)閉中心主機(jī)。

[root@mylinux fin]# ifconfig     #當(dāng)前IP
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B7:AB:D0  
          inet addr:192.168.191.128  Bcast:192.168.191.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb7:abd0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3627 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2866 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:353550 (345.2 KiB)  TX bytes:516806 (504.6 KiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@mylinux fin]# ifconfig eth0:1 192.168.191.100 netmask 255.255.255.255#添加IP地址
[root@mylinux fin]# ifconfig eth0:2 192.168.191.101 netmask 255.255.255.255#添加IP地址
[root@mylinux fin]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B7:AB:D0  
          inet addr:192.168.191.128  Bcast:192.168.191.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb7:abd0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9337 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7346 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:899106 (878.0 KiB)  TX bytes:1155902 (1.1 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:B7:AB:D0  
          inet addr:192.168.191.100  Bcast:192.168.191.100  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:B7:AB:D0  
          inet addr:192.168.191.101  Bcast:192.168.191.101  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2148 (2.0 KiB)  TX bytes:2148 (2.0 KiB)
[root@mylinux httpd24]# vim httpd.conf              #打開主配置文件

#DocumentRoot "/usr/local/apache/htdocs"            #注釋該行,關(guān)閉中心主機(jī)

Include /etc/httpd24/extra/httpd-vhosts.conf        #啟動虛擬主機(jī)配置文件 

[root@mylinux httpd24]# vim extra/httpd-vhosts.conf #到專用虛擬主機(jī)配置文件進(jìn)行配置
<VirtualHost 192.168.191.100>                    
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/docs/server1"   
    ServerName www.server1.com
    ErrorLog "logs/server1.error_log"
    CustomLog "logs/server1.access_log" common
</VirtualHost>

<VirtualHost 192.168.191.101>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/docs/server2"
    ServerName www.server2.com
    ErrorLog "logs/server2.error_log"
    CustomLog "logs/server2.access_log" common
</VirtualHost>
[root@mylinux httpd24]# apachectl configtest
Syntax OK
[root@mylinux httpd24]# cd /usr/local/apache/       #創(chuàng)建首頁
[root@mylinux apache]# mkdir docs
[root@mylinux apache]# cd docs/
[root@mylinux docs]# mkdir {server1,server2}
[root@mylinux docs]# cd server1/
[root@mylinux server1]# echo "www.server1.com" > index.html
[root@mylinux server1]# cd ..
[root@mylinux docs]# cd server2/
[root@mylinux server2]# echo "www.server2.com" > index.html
[root@mylinux server2]# apachectl restart

七、Web服務(wù)器Apache的配置和管理

七、Web服務(wù)器Apache的配置和管理

  • 基于主機(jī)名的虛擬主機(jī)服務(wù)

  其具體配置過程為:

[root@mylinux extra]# vim /etc/hosts     #添加主機(jī)名解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.191.128 www.server1.com
192.168.191.128 www.server2.com
"/etc/hosts" 4L, 222C written

[root@mylinux httpd24]# vim httpd.conf              #打開主配置文件

#DocumentRoot "/usr/local/apache/htdocs"            #注釋該行,關(guān)閉中心主機(jī)
Include /etc/httpd24/extra/httpd-vhosts.conf        #啟動虛擬主機(jī)配置文件 
[root@mylinux httpd24]# vim extra/httpd-vhosts.conf #到專用虛擬主機(jī)配置文件進(jìn)行配置

<VirtualHost 192.168.191.128>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/docs/server1"
    ServerName www.server1.com
    ErrorLog "logs/server1.error_log"
    CustomLog "logs/server1.access_log" common
    <Directory "/usr/local/apache/docs/server1">
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.191.128>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache/docs/server2"
    ServerName www.server2.com
    ErrorLog "logs/server2.error_log"
    CustomLog "logs/server2.access_log" common
    <Directory "/usr/local/apache/docs/server2">
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
    </Directory>
</VirtualHost>
[root@mylinux extra]# apachectl configtest
Syntax OK
[root@mylinux extra]# apachectl restart
[root@mylinux extra]# curl       #測試 
www.server1.com
[root@mylinux extra]# curl       #測試 
www.server2.com
  • 防止網(wǎng)站圖片盜鏈

  為了防止其他網(wǎng)站非法盜取本網(wǎng)站中的圖片文件,可以在Apache中進(jìn)行配置,以禁止圖片被非法盜用。假設(shè)本網(wǎng)站域名為www.myweb.com,用戶可在配置文件中加入如下內(nèi)容:

SetEnvIfNoCase Referer "^http://www.myweb.com/" local_ref=1
<FilesMatch ".(gif|jpg|bmp)">
  Order Allow,Deny
  Allow from env=local_ref
</FileMatch>



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI