1 Apache是什麼?
Apache HTTP Server是Apache軟件基金會的一個高性能、功能強大、很靈活的開放源代碼的web服務軟件;它可以運行在所有系統平臺上,安全性最好。
Apache的特點
功能強大、配置簡單、速度快、應用廣泛、性能穩定可靠,並可做代理服務器或負載均衡來使用
應用場合
使用Apache運行靜態HTML網頁、圖片(處理靜態小文件能力不及Nginx)
使用Apache結合PHP引擎運行PHP、Perl、Python等程序,LAMP被稱爲經典組合
使用Apache結合Tomcat/Resin運行JSP、JAVA等程序,成爲中小企業首選
使用Apache作代理、負載均衡、rewrite規則過濾等
2 安裝apache
下載apache服務軟件
[root@lamp01 ~]# cd /home/oldboy/tools/ [root@lamp01 tools]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.32.tar.gz [root@lamp01 tools]# tar xf httpd-2.2.32.tar.gz [root@lamp01 tools]# ls httpd-2.2.32 httpd-2.2.32.tar.gz [root@lamp01 tools]# cd httpd-2.2.32
安裝所需的zlib庫
[root@lamp01 httpd-2.2.32]# yum install zlib zlib-devel -y
選擇安裝參數
[root@lamp01 httpd-2.2.32]# ./configure \ --prefix=/application/apache2.2.32 \ 《=====安裝目錄 --enable-deflate \ 《===壓縮,給客戶端返回資源時壓縮(傳的快,消耗CPU) --enable-expires \ 《===讓瀏覽器打開頁面的時候有緩存 --enable-headers \ 《====激活http頭 --enable-modules=most \ 《=====激活大多數功能模塊 --enable-so \ --with-mpm=worker \ 《====有一個主進程,下面有線程,由線程提供服務 --enable-rewrite 《===僞靜態功能 [root@lamp01 httpd-2.2.32]# make [root@lamp01 httpd-2.2.32]# make install
做軟鏈接
[root@lamp01 httpd-2.2.32]# ln -s /application/apache2.2.32/ /application/apache [root@lamp01 httpd-2.2.32]# ll /application/apache lrwxrwxrwx 1 root root 26 6月 28 21:40 /application/apache -> /application/apache2.2.32/
檢查語法並啓動服務
[root@lamp01 httpd-2.2.32]# /application/apache/bin/apachectl -t httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.4.121 for ServerName Syntax OK [root@lamp01 httpd-2.2.32]# /application/apache/bin/apachectl start httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.4.121 for ServerName
查看服務端口
[root@lamp01 httpd-2.2.32]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 50819 root 4u IPv6 47186 0t0 TCP *:http (LISTEN) httpd 50821 daemon 4u IPv6 47186 0t0 TCP *:http (LISTEN) httpd 50822 daemon 4u IPv6 47186 0t0 TCP *:http (LISTEN) httpd 50823 daemon 4u IPv6 47186 0t0 TCP *:http (LISTEN)
查看進程
[root@lamp01 httpd-2.2.32]# ps -ef|grep httpd root 50819 1 0 21:45 ? 00:00:00 /application/apache2.2.32/bin/httpd -k start daemon 50820 50819 0 21:45 ? 00:00:00 /application/apache2.2.32/bin/httpd -k start daemon 50821 50819 0 21:45 ? 00:00:00 /application/apache2.2.32/bin/httpd -k start daemon 50822 50819 0 21:45 ? 00:00:00 /application/apache2.2.32/bin/httpd -k start daemon 50823 50819 0 21:45 ? 00:00:00 /application/apache2.2.32/bin/httpd -k start root 50907 1009 0 21:46 pts/1 00:00:00 grep httpd
用瀏覽器輸入服務器地址來訪問檢查apache是否安裝正確
如果不OK,檢查iptables,selinux,端口,服務是否開啓,httpd進程是否存在
Apache命令參數
用/application/apache/bin/apachectl –l來查看編譯安裝了哪些模塊
[root@lamp01 httpd-2.2.32]# /application/apache/bin/apachectl -l|egrep "deflate|expires|headers|_so|rewrite" mod_deflate.c mod_expires.c mod_headers.c mod_rewrite.c mod_so.c
用-M來顯示模塊是靜態還是動態的
[root@lamp01 httpd-2.2.32]#/application/apache/bin/apachectl -M
如果一個軟件運行很慢,用strace跟蹤一個進程的使用情況
[root@lamp01 httpd-2.2.32]#strace /application/apache/bin/apachectl -M
3 apache目錄下重要命令及文件
部分重要文件和目錄
Apache文件總覽
[root@lamp01 ~]# cd /application/apache [root@lamp01 apache]# ls bin cgi-bin error icons lib man modules build conf htdocs include logs manual [root@lamp01 apache]# cd conf/ [root@lamp01 conf]# ls extra httpd.conf.bak magic original httpd.conf httpd.conf.ori mime.types [root@lamp01 conf]# grep -i documentroot httpd.conf 《===主配置文件 # DocumentRoot: The directory out of which you will serve your DocumentRoot "/application/apache2.2.32/htdocs" 《====默認網站的根目錄 # This should be changed to whatever you set DocumentRoot to. # access content that does not live under the DocumentRoot [root@lamp01 conf]# cd ../htdocs/ [root@lamp01 htdocs]# ls index.html 《=====默認首頁文件 [root@lamp01 htdocs]# cat index.html <html><body><h1>It works!</h1></body></html>
命令目錄
配置目錄
其他一些重要目錄
主配置文件詳解
[root@lamp01 conf]# grep -Ev "#|^$" httpd.conf.bak ServerRoot "/application/apache2.2.32" 服務安裝的目錄 Listen 80 監聽的端口 <IfModule !mpm_netware_module> 模塊 <IfModule !mpm_winnt_module> 模塊 User www 用戶 Group www 用戶組 </IfModule> </IfModule> ServerAdmin [email protected] 管理員的郵箱,網站出問題會顯示,用戶會聯繫 ServerName 127.0.0.1:80 DocumentRoot "/application/apache2.2.32/htdocs" 默認的站點目錄 <Directory /> # Options FollowSymLinks # AllowOverride None # Order deny,allow # Deny from all # </Directory> #到這裏都是權限控制,表示根目錄拒絕任何人訪問 <Directory "/application/apache2.2.32/htdocs"> Options Indexes FollowSymLinks 《==對外展示目錄結構,刪除Indexes不對外展示 AllowOverride None Order allow,deny Allow from all </Directory> 新建站點,加以上6行 <IfModule dir_module> DirectoryIndex index.php index.html 指定訪問的首頁 </IfModule> <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> ErrorLog "logs/error_log" 錯誤日誌的配置 LogLevel warn 日誌的級別 <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> <IfModule alias_module> ScriptAlias /cgi-bin/ "/application/apache2.2.32/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule> <Directory "/application/apache2.2.32/cgi-bin"> 關於cgi的配置,已經被淘汰 AllowOverride None Options None Order allow,deny Allow from all </Directory> DefaultType text/plain 文本缺省的類型 <IfModule headers_module> RequestHeader unset Proxy early </IfModule> <IfModule mime_module> TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps </IfModule> Include conf/extra/httpd-mpm.conf Include conf/extra/httpd-vhosts.conf <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule> <Directory "/var/html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
擴展配置文件(*爲重點)
[root@lamp01 conf]# cd extra/ [root@lamp01 extra]# ll 總用量 60 -rw-r--r-- 1 root root 2859 6月 28 2017 httpd-autoindex.conf -rw-r--r-- 1 root root 1753 6月 28 2017 httpd-dav.conf -rw-r--r-- 1 root root 2344 6月 28 2017 httpd-default.conf ** -rw-r--r-- 1 root root 1103 6月 28 2017 httpd-info.conf -rw-r--r-- 1 root root 5078 6月 28 2017 httpd-languages.conf -rw-r--r-- 1 root root 949 6月 28 2017 httpd-manual.conf -rw-r--r-- 1 root root 3789 6月 28 2017 httpd-mpm.conf ***** -rw-r--r-- 1 root root 2207 6月 28 2017 httpd-multilang-errordoc.conf -rw-r--r-- 1 root root 12418 6月 28 2017 httpd-ssl.conf -rw-r--r-- 1 root root 817 6月 28 2017 httpd-userdir.conf -rw-r--r-- 1 root root 1583 6月 28 2017 httpd-vhosts.conf *****其他當沒看見
Apache的模式配置文件httpd-mpm.conf
[root@lamp01 extra]# cat httpd-mpm.conf # prefork MPM prefork模式:直接由進程提供服務,相對安全穩定、但消耗資源多 # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 併發150 MaxRequestsPerChild 0 </IfModule> # worker MPM worker模式:有一個主進程,下面有線程,由線程對外提供服務 # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_worker_module> StartServers 2 MaxClients 150 併發150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
httpd-default.conf配置文件裏面有一些超時的參數、最大接受連接、隱藏版本等配置參數
4 Apache站點的部署
虛擬主機的分類
虛擬主機:部署多個站點,每個站點希望用不同的域名和站點目錄,或者是不同的端口,IP。需要虛擬主機功能
一個http服務要配置多個站點,就需要虛擬主機
虛擬主機分類(對於apache):
基於域名*****
基於端口
基於IP
配置虛擬主機
創建虛擬主機站點目錄
[root@lamp01 conf]# mkdir /var/html/{www,blog,bbs} -p [root@lamp01 conf]# touch /var/html/{www,blog,bbs}/index.html [root@lamp01 conf]# for name in www blog bbs;do echo "http://$name.etiantian.org" >/var/html/$name/index.html;done [root@lamp01 conf]# for name in www blog bbs;do cat /var/html/$name/index.html;done http://www.etiantian.org http://blog.etiantian.org http://bbs.etiantian.org
虛擬主機站點配置
[root@lamp01 extra]# vim httpd-vhosts.conf <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/www" ServerName www.etiantian123.org ServerAlias etiantian123.org ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/blog" ServerName blog.etiantian123.org #ServerAlias etiantian123.org ErrorLog "logs/blog-error_log" CustomLog "logs/blog-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/bbs" ServerName bbs.etiantian123.org #ServerAlias etiantian123.org ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common </VirtualHost>
修改主配置文件,將下面兩行的註釋去掉
[root@lamp01 extra]# vim ../httpd.conf Include conf/extra/httpd-vhosts.conf Include conf/extra/httpd-mpm.conf
檢查語法,重啓服務
[root@lamp01 extra]# ../../bin/apachectl -t Syntax OK [root@lamp01 extra]# ../../bin/apachectl graceful 平滑重啓 [root@lamp01 extra]# ../../bin/apachectl restart 重啓
用瀏覽器測試,出現403錯誤
原因是在添加站點的時候,主配置文件htdocs相應字段沒有添加相應的配置
[root@lamp01 extra]# vi ../httpd.conf <Directory "/var/html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> "../httpd.conf" 435L, 14207C written
重啓服務
[root@lamp01 extra]# ../../bin/apachectl -t Syntax OK [root@lamp01 extra]# ../../bin/apachectl graceful
Apache日誌
有兩種日誌格式:combined和common
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> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule>
5 apache日誌輪詢
安裝日誌輪詢工具
[root@lamp01 tools]# ls cronolog-1.6.2.tar.gz httpd-2.2.32 httpd-2.2.32.tar.gz [root@lamp01 tools]# tar xf cronolog-1.6.2.tar.gz [root@lamp01 tools]# cd cronolog-1.6.2 [root@lamp01 cronolog-1.6.2]# ./configure [root@lamp01 cronolog-1.6.2]# make [root@lamp01 cronolog-1.6.2]# make install
配置按天的日誌輪詢
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/bbs" ServerName bbs.etiantian123.org #ServerAlias etiantian123.org ErrorLog "logs/bbs-error_log" CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" combined "extra/httpd-vhosts.conf" 52L, 1623C 已寫入 [root@lamp01 conf]# mkdir /app/logs -p [root@lamp01 conf]# pwd /application/apache/conf [root@lamp01 conf]# ../bin/apachectl -t Syntax OK [root@lamp01 conf]# ../bin/apachectl graceful [root@lamp01 conf]# [root@lamp01 conf]# [root@lamp01 conf]# [root@lamp01 conf]# [root@lamp01 conf]# ll / app/ boot/ lib64/ root/ test/ application/ data/ lost+found/ sbin/ tmp/ .autofsck dev/ media/ selinux/ usr/ .autorelabel etc/ mnt/ server/ var/ backup/ home/ opt/ srv/ bin/ lib/ proc/ sys/ [root@lamp01 conf]# ll /app app/ application/ [root@lamp01 conf]# ll /app app/ application/ [root@lamp01 conf]# ll /app/logs/ 總用量 0 [root@lamp01 conf]# ll /app/logs/ 總用量 4 -rw-r--r-- 1 root root 270 3月 29 22:18 access_bbs_20180329.log [root@lamp01 conf]# cat /app/logs/access_bbs_20180329.log 192.168.4.53 - - [29/Mar/2018:22:18:51 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; QQD
日誌的統計,排序
[root@lamp01 logs]# awk '{print $1}' access_bbs_20180329.log |sort|uniq -c|sort -rn 40 192.168.4.53
6 安裝PHP
安裝相關的函數庫包
yum install zlib-devel libxml2-devel libjpeg-devel libiconv-devel -y yum install freetype-devel libpng-devel gd-devel curl-devel libxslt-devel -y echo $?
yum源裏沒有libiconv-devel [root@lnmp02 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz [root@lnmp02 tools]#tar zxf libiconv-1.14.tar.gz [root@lnmp02 tools]#cd libiconv-1.14 [root@lnmp02 libiconv-1.14]#./configure --prefix=/usr/local/libiconv [root@lnmp02 libiconv-1.14]#make [root@lnmp02 libiconv-1.14]#make install ./configure \ --prefix=/application/php-5.3.27 \ --with-apxs2=/application/apache/bin/apxs \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-mbstring \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --enable-sockets \ --with-xmlrpc \ --enable-soap \ --enable-short-tags \ --enable-zend-multibyte \ --enable-static \ --with-xsl \ --enable-ftp \ --with-curl \ --with-libxml-dir make make install [root@lamp01 php-5.3.27]# ln -s /application/php-5.3.27/ /application/php [root@lamp01 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
修改apache主配置文件httpd.conf
備份conf文件,既可以還原,又能比對查看修改了什麼配置
[root@lamp01 conf]# cp httpd.conf httpd.conf.ori [root@lamp01 conf]# vi httpd.conf
321行,增加下面兩行對PHP的解析支持
AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps
98行修改ServerName
ServerName 127.0.0.1:80
修改daemon默認用戶,爲了安全考慮
166行修改首頁 index.php
對比配置文件和備份文件,看看是否完全修改
[root@lamp01 conf]# diff httpd.conf httpd.conf.ori 66,67c66,67 < User www < Group www --- > User daemon > Group daemon 99d98 < ServerName 127.0.0.1:80 <==========解決找不到FQDN的警告 168c167 < DirectoryIndex index.php index.html --- > DirectoryIndex index.html 320,321d318 < AddType application/x-httpd-php .php .phtml < AddType application/x-httpd-php-source .phps
把修改的默認用戶和組創建出來,不然會報錯
[root@lamp01 conf]# useradd www -s /sbin/nologin -M [root@lamp01 conf]# id www uid=505(www) gid=505(www) 組=505(www)
編輯index.php
[root@lamp01 logs]# cat /var/html/blog/index.php <?php phpinfo(); ?>
用瀏覽器測試PHP是否安裝成功
7 mysql安裝(略)