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
编译安装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服务:
测试使用mysql客户端连接mysql服务器:
由于当时进行了安全初始化,所以在登录的时候要指定密码才能登录。
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进程就说明编译安装成功。
2、使用[root@localhost etc]# netstat -tnlp | grep php-fpm查看,默认情况下,fpm监听在127.0.0.1的9000端口。
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