LAMP组合的编译安装:

    httpd+php

        modules: 把php编译成httpd的DSO对象;

            prefork: libphp5

            event, worker: libphp5-zts

                在使用event和worker模型时,在编译php时,要加入此选项--enable-maintainer-zts。

            cgi

            fpm(fastcgi):php作为独立的服务

            

            httpd对fastcgi协议的支持:

                httpd-2.2: 需要额外安装fcgi模块;

                httpd-2.4: 自带fcgi模块;

            安装次序:

                httpd, MariaDB, php。

编译安装httpd:

    前提:安装好Development tools、Server Platform Development这两个工具包组。在此处,编译安装的为httpd-2.4。


    第一步需要安装pcre-devel这个包,可能会有依赖关系。

[root@localhost ~]# yum install pcre-devel

    第二步:获取apr、apr-util以及httpd这三个源代码包。

    第三步:解压并安装apr包。

[root@localhost ~]# tar xf apr-1.5.0.tar.bz2 #解压该源代码包
[root@localhost ~]# cd apr-1.5.0                #切换到解压之后的目录下
[root@localhost apr-1.5.0]# ./configure --prefix=/usr/local/apr #安装目录/usr/local/apr
[root@localhost apr-1.5.0]# make && make install #根据makefile文件,构建应用程序

    第四步:解压并安装apr-util包。

[root@localhost ~]# tar xf apr-util-1.5.3.tar.bz2  #解压该源代码包
[root@localhost ~]# cd apr-util-1.5.3              #切换到解压之后的目录下
[root@localhost apr-util-1.5.3]# ./configure -prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
#指定安装目录为/usr/local/apr-util,并且其依赖的apr包的安装位置为/usr/local/apr
[root@localhost apr-1.5.3]# make && make install         #根据makefile文件,构建应用程序

    第五步:解压并安装httpd包。   

[root@localhost ~]# tar xf httpd-2.4.10.tar.bz2 
[root@localhost ~]# cd httpd-2.4.10
[root@localhost httpd-2.4.10]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --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@localhost apr-1.5.3]# make && make install         #根据makefile文件,构建应用程序

    对安装过程中个选项的解释:

        --prefix=/usr/local/apache:httpd的安装路径

        --sysconfdir=/etc/httpd24:配置文件的路径

        --enable-so --enable-ssl --enable-cgi:支持so模块,支持ssl协议,支持cgi协议

        --enable-rewrite --with-zlib --with-pcre:支持重写,支持浏览网页进行压缩传输,需要使用到pcre

        --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util:所依赖到的apr和apr-util包安装路径

        --enable-modules=most:支持大多数的模块

        --enable-mpms-shared=all --with-mpm=event:所有的mpm共享支持,默认的mpm类型为event 


 

    第六步:安装完成,提供服务相关的配置。

        (1)将/usr/local/apache/bin/apachectl文件复制到/etc/init.d下,并且命名为httpd;

[root@localhost apache]# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd

        (2)修改/etc/init.d/httpd文件,添加如下两行;

# chkconfig: - 85 15  #此处指定服务的启动顺序
# description: Apache is a World Wide Web server.  It is used to serve \

        (3)添加该服务到系统服务;

[root@localhost ~]# chkconfig --add httpd

        (4)添加PATH环境变量;

                在/etc/profile.d/目录下创建httpd.sh,内容如下:

                    export PATH=/usr/local/apache/bin/:$PATH

                添加环境变量并不是必须的,如果不添加该内容,则在运行/usr/local/apache/bin/下边的所有相关命令的时候,必须使用绝对路径运行,反之,则可以使用命令本身进行运行,不用写绝对路径。


        第七步:启动服务,并且测试。

[root@localhost bin]# service httpd start
httpd (pid 35925) already running
[root@localhost bin]# ss -tnl

        wKioL1YlCCTyeUEkAAC_X22pYvE538.jpg


编译安装marirdb: 

    使用通用二进制包进行mariadb的安装。

    1、新建用户,创建一个数据目录/mydata/data,指定其所属的组为mysql,所用的shell为/sbin/nologin,账户登陆时所用的家目录为/mydata/data。、

[root@localhost ~]# groupadd -r mysql
[root@localhost ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
[root@localhost ~]# chown -R mysql:mysql /mydata/data

    2、解压通用二进制mrdiadb包,将其解压至/usr/local目录下。并为其创建一个软连接mysql指向解压之后的文件夹。

[root@localhost ~]# tar xf mariadb-5.5.45-linux-x86_64.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local
[root@localhost local]# ln -sv mariadb-5.5.45-linux-x86_64  mysql

    3、切换至/usr/local/mysql目录下,改变当前目录的属主和属组为mysql。初始化mysql,指明其数据目录为/mydata/data,用户为mysql。

[root@localhost local]# cd mysql/
[root@localhost mysql]# chown -R mysql:mysql 
[root@localhost mysql]# scripts/mysql_install_db --datadir=/mydata/data --user=mysql

    4、改变当前目录的属主为root,并为其提供配置文件。

[root@localhost mysql]# chown -R root  .   #不要省略这个点号
[root@localhost mysql]# cp support-files/my-large.cnf  /etc/my.cnf

     如果在系统上已经存在/etc/my.cnf配置文件,可以直接覆盖。当然,先备份一份,出问题可以及时修复。

    5、编辑/etc/my.cnf该配置文件时,要加入以下内容:

datadir=/mydata/data   #指明数据的存储目录 
innodb_file_per_table=on  #指明默认使用的数据引擎
skip_name_resolve=on  #跳过DNS名称解析

    6、为mysql服务提供服务脚本,并且为该脚本提供执行权限。并添加至服务列表。  

[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chkconfig --add mysqld

    7、输出mysql的头文件至系统头文件路径/usr/include,输出mysql的库文件给系统库查找路径,让系统重新载入系统库。

[root@localhost mysql]# ln -sv /usr/local/mysql/include  /usr/include/mysql
[root@localhost mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@localhost mysql]# ldconfig

     添加PATH环境变量;

        在/etc/profile.d/目录下创建mysqld.sh,内容如下:

            export PATH=/usr/local/mysql/bin/:$PATH

        添加环境变量并不是必须的,如果不添加该内容,则在运行/usr/local/mysql/bin/下边的所有相关命令的时候,必须使用绝对路径运行,反之,则可以使用命令本身进行运行,不用写绝对路径。

    进行安全初始化:

        第一种:添加了PATH环境变量:

            直接执行mysql_secure_installation就可以,然后进行自己选择要修改的项即可。

        第二种:没有修改PATH变量:

[root@localhost bin]# /usr/local/mysql/bin/mysql_secure_installation

    测试启动mysql服务:

        wKioL1YlCm_j32u8AABqIYEABlU141.jpg

    测试使用mysql客户端连接mysql服务器:

        wKiom1YlCnawxdZjAABMcGnFACQ455.jpg

        由于当时进行了安全初始化,所以在登录的时候要指定密码才能登录。


    mysql允许远程登录:

MariaDB [(none)]> create user 'lcs'@'172.16.%.%' identified by 'linux'; 
Query OK, 0 rows affected (0.17 sec)
#创建lcs这个用户,并允许其在172.16这个网段中的主机上都可以远程登录,其登录密码为linux。
 
MariaDB [(none)]> grant all on *.* to 'lcs'@'172.16.%.%';
Query OK, 0 rows affected (0.05 sec)
#为lcs这个用户授权,允许其操作数据库中的所有内容。


编译安装php:

    第一种:直接当作模块编译进httpd中。    

        首先解决依赖关系,安装bzip2-devel libmcrypt-devel libxml2-devel这三个包。注意,在配置yum源的时候,要配置系统安装源及epel源。

        1、解压php源码包,同时使用configure命令,进行配置。

[root@localhost ~]# tar xf php-5.4.40.tar.bz2
[root@localhost ~]# cd php-5.4.40
[root@localhost php-5.4.40]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts

        configure命令中所使用的选项的意义为:

            --prefix=/usr/local/php  #指定其安装目录

            --with-openssl --with-mysql=/usr/local/mysql #支持ssl协议,其所依赖的mysql的安装目录为/usr/local/mysql

            --with-mysqli=/usr/local/mysql/bin/mysql_config

            --enable-mbstring --with-freetype-dir #支持mbstring模块

            --with-jpeg-dir --with-png-dir --with-zlib #支持jpeg、png格式,以及页面压缩传输

            --with-libxml-dir=/usr --enable-xml #其xml库目录为/usr,支持xml格式 

            --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs #支持套接字

            --with-mcrypt  --with-config-file-path=/etc #其配置文件的在/etc目录下

            --with-config-file-scan-dir=/etc/php.d --with-bz2

            --enable-maintainer-zts #由于在编译httpd使用了event模式,所以在此处使用此选项使得php支持event模型。    

        注:为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

    2、使用make和make install命令进行安装。

    3、编辑apache的配置文件。

[root@localhost php-5.4.40]# vim /etc/httpd/httpd.conf

        进行如下的设置。

AddType application/x-httpd-php  .php #支持php结尾的文件
AddType application/x-httpd-php-source  .phps  #支持phps结尾的文件
DirectoryIndex index.php index.html

    4、通过以上配置,就将php作为模块编译进httpd了。使用命令httpd -M可查看已安装的模块。

    5、在服务器的根目录下,创建一个index.php,作为测试。127.0.0.1可用localhost代替。

<?php      
    phpinfo();      
    $link = mysql_connect('127.0.0.1','root','linux');      
    if ($link)       
        echo "Success...";      
    else       
        echo "Failure...";      
      mysql_close();    
?>


第二种:以fpm的方式编译php。

    首先解决依赖关系,安装bzip2-devel libmcrypt-devel libxml2-devel这三个包。注意,在配置yum源的时候,要配置系统安装源及epel源。

    1、解压php源码包,同时使用configure命令,进行配置以及安装。

[root@localhost ~]# cd php-5.4.40
[root@localhost php-5.4.40]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
[root@localhost php-5.4.40]# make && make install

    由于要以fpm的模式运行,所以要加入--enable-fpm该选项。就是将php作为一个单独的服务运行。


     2、为php提供配置文件。 

[root@localhost php-5.4.40]# cp php.ini-production /etc/php.ini

    3、为php-fpm提供系统启动脚本。

[root@localhost php-5.4.40]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@localhost php-5.4.40]# chmod +x /etc/rc.d/init.d/php-fpm  #给该文件加执行权限
[root@localhost php-5.4.40]# chkconfig --add php-fpm  #将其加入到服务列表中
[root@localhost php-5.4.40]# chkconfig php-fpm on  #开启该服务

     4、为php-fpm提供配置文件,并编辑相关设置。

[root@localhost ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@localhost ~]# cd /usr/local/php/etc/
[root@localhost etc]# vim php-fpm.conf   #编辑配置文件
[root@localhost etc]# service php-fpm start #启动php服务

    编辑配置文件,修改如下内容

pm.max_children = 50  #修改
pm.start_servers = 5  #修改
pm.min_spare_servers = 2  #修改
pm.max_spare_servers = 8  #修改
pid = /usr/local/php/var/run/php-fpm.pid  #添加

    启动测试:

        1、使用[root@localhost etc]# ps aux | grep php-fpm进行查看,若有几个php-fpm进程就说明编译安装成功。

        wKiom1YlEE6zZr6MAAInqS5lzwI053.jpg

        2、使用[root@localhost etc]# netstat -tnlp | grep php-fpm查看,默认情况下,fpm监听在127.0.0.1的9000端口。

        wKioL1YlEJaT4jUBAABHgeFd8cw193.jpg

    

    5、编辑/etc/http/httpd.conf,进行修改如下内容,使httpd支持php。

AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
DirectoryIndex index.php index.html

    6、编辑/etc/http/httpd.conf,进行修改如下内容,使httpd支持fastcgi协议。在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

     7、配置中心主机支持FastCGI。同样的,在相对应的虚拟主机添加如下内容就可。其中,/PATH/TO/DOCUMENT_ROOT/指代的为DocumentRoot所在的目录。

ProxyRequests Off     #关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

     ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。


编译安装httpd配置https服务:

    在配置文件中,要把ssl模块给加入进去。同时要把ssl的配置文件以及vhosts的配置文件include进入httpd.conf文件中。   

LoadModule ssl_module modules/mod_ssl.so
Include /etc/httpd/extra/httpd-ssl.conf
Include /etc/httpd/extra/httpd-vhosts.conf