apache&LAMP搭建

1 Apache是什麼?

Apache HTTP ServerApache軟件基金會的一個高性能、功能強大、很靈活的開放源代碼的web服務軟件;它可以運行在所有系統平臺上,安全性最好。

Apache的特點

功能強大、配置簡單、速度快、應用廣泛、性能穩定可靠,並可做代理服務器或負載均衡來使用

應用場合

使用Apache運行靜態HTML網頁、圖片(處理靜態小文件能力不及Nginx

使用Apache結合PHP引擎運行PHPPerlPython等程序,LAMP被稱爲經典組合

使用Apache結合Tomcat/Resin運行JSPJAVA等程序,成爲中小企業首選

使用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,檢查iptablesselinux,端口,服務是否開啓,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>

命令目錄

圖片.png

配置目錄

圖片.png

 

其他一些重要目錄

圖片.png

圖片.png


主配置文件詳解

[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日誌

有兩種日誌格式:combinedcommon

    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安裝(略)

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章