您好,登錄后才能下訂單哦!
萬維網(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.so | mod_proxy的AJP支持模塊 |
mod_proxy_balancer.so | mod_proxy的負(fù)載均衡模塊 |
mod_proxy_ftp.so | mod_proxy的ftp支持模塊 |
mod_proxy_http.so | mod_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頁面
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)多個請求 |
<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>
<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>
<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]#
虛擬目錄
使用虛擬目錄是另一種將根目錄以外的內(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
頁面重定向
如果用戶經(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配置頁面重定向。
[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。
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)重程度 | 等級 | 說明 |
1 | emerg | 系統(tǒng)不可用 |
2 | alert | 需要立即引起注意的情況 |
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
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
基于主機(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>
免責(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)容。