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

 


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