第二十章 LNMP动态网站架构

  • 内容
  • 评论
  • 相关

LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案(其logo见图20-1)。LNMP中的字母L是Linux系统的意思,不仅可以是RHEL、CentOS、Fedora,还可以是Debian、Ubuntu等系统。

在使用源码包安装服务程序之前,首先要让安装主机具备编译程序源码的环境,他需要具备C语言、C++语言、Perl语言的编译器,以及各种常见的编译支持函数库程序。因此请先配置妥当Yum软件仓库,然后把下面列出的这些软件包都统统安装上:

[root@rhel7 ~]# yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel

作者已经把安装LNMP动态网站部署架构所需的16个软件源码包和1个用于检查效果的论坛网站系统软件包上传到与本书配套的站点服务器上。大家可以在Windows系统中下载后通过ssh服务传送到打算部署LNMP动态网站架构的Linux服务器中,也可以直接在Linux服务器中使用wget命令下载这些源码包文件。根据第6章讲解的FHS协议,建议把要安装的软件包存放在/usr/local/src目录中:

[root@rhel7 ~]# cd /usr/local/src

wget https://www.linuxprobe.com/Software/cmake-2.8.11.2.tar.gz

wget https://www.linuxprobe.com/Software/Discuz_X3.2_SC_GBK.zip

wget https://www.linuxprobe.com/Software/freetype-2.5.3.tar.gz

wget https://www.linuxprobe.com/Software/jpegsrc.v9a.tar.gz

wget https://www.linuxprobe.com/Software/libgd-2.1.0.tar.gz

wget https://www.linuxprobe.com/Software/libmcrypt-2.5.8.tar.gz

wget https://www.linuxprobe.com/Software/libpng-1.6.12.tar.gz

wget https://www.linuxprobe.com/Software/libvpx-v1.3.0.tar.bz2

wget https://www.linuxprobe.com/Software/mysql-5.6.19.tar.gz

wget https://www.linuxprobe.com/Software/nginx-1.6.0.tar.gz

wget https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz

wget https://www.linuxprobe.com/Software/php-5.5.14.tar.gz

wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz

wget https://www.linuxprobe.com/Software/t1lib-5.1.2.tar.gz

wget https://www.linuxprobe.com/Software/tiff-4.0.3.tar.gz

wget https://www.linuxprobe.com/Software/yasm-1.2.0.tar.gz

wget https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz

CMake是Linux系统中一款常用的编译工具。要想通过源码包安装服务程序,就一定要严格遵守上面总结的安装步骤—下载及解压源码包文件、编译源码包代码、生成二进制安装程序、运行二进制的服务程序安装包。接下来在解压、编译各个软件包源码程序时,都会生成大量的输出信息,下文中将其省略,请读者以实际操作为准。

[root@rhel7 src]# tar xzvf cmake-2.8.11.2.tar.gz

[root@rhel7 src]# cd cmake-2.8.11.2/

[root@rhel7 cmake-2.8.11.2]# ./configure

[root@rhel7 cmake-2.8.11.2]# make

[root@rhel7 cmake-2.8.11.2]# make install

配置MYsql服务

本书在第18章讲解过MySQL和MariaDB数据库管理系统之间的因缘和特性,也狠狠地夸奖了MariaDB数据库,但是MySQL数据库当前依然是生产环境中最常使用的关系型数据库管理系统之一,坐拥极大的市场份额,并且已经通过十几年不断的发展向业界证明了自身的稳定性和安全性。另外,虽然第18章已经讲解了基本的数据库管理知识,但是为了进一步帮助大家夯实基础,本章依然在这里整合了MySQL数据库内容,使大家在温故的同时可以知新。

在使用Yum软件仓库安装服务程序时,系统会自动根据RPM软件包中的指令集完整软件配置等工作。但是一旦选择使用源码包的方式来安装,这一切就需要自己来完成了。针对MySQL数据库来讲,我们需要在系统中创建一个名为mysql的用户,专门用于负责运行MySQL数据库。请记得要把这类账户的Bash终端设置成nologin解释器,避免黑客通过该用户登录到服务器中,从而提高系统安全性。

[root@rhel7 cmake-2.8.11.2]# cd ..

[root@rhel7 src]# useradd mysql -s /sbin/nologin

创建一个用于保存MySQL数据库程序和数据库文件的目录,并把该目录的所有者和所属组身份修改为mysql。其中,/usr/local/mysql是用于保存MySQL数据库服务程序的目录,/usr/local/mysql/var则是用于保存真实数据库文件的目录。

[root@rhel7 src]# mkdir -p /usr/local/mysql/var

[root@rhel7 src]# chown -Rf mysql:mysql /usr/local/mysql

接下来解压、编译、安装MySQL数据库服务程序。在编译数据库时使用的是cmake命令,其中,-DCMAKE_INSTALL_PREFIX参数用于定义数据库服务程序的保存目录,-DMYSQL_DATADIR参数用于定义真实数据库文件的目录,-DSYSCONFDIR则是定义MySQL数据库配置文件的保存目录。由于MySQL数据库服务程序比较大,因此编译的过程比较漫长,在此期间可以稍微休息一下。

[root@rhel7 src]# tar xzvf mysql-5.6.19.tar.gz

[root@rhel7 src]# cd mysql-5.6.19/

[root@rhel7 mysql-5.6.19]#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc

[root@rhel7 mysql-5.6.19]# make

[root@rhel7 mysql-5.6.19]# make install

为了让MySQL数据库程序正常运转起来,需要先删除/etc目录中的默认配置文件,然后在MySQL数据库程序的保存目录scripts内找到一个名为mysql_install_db的脚本程序,执行这个脚本程序并使用–user参数指定MySQL服务的对应账号名称(在前面步骤已经创建),使用–basedir参数指定MySQL服务程序的保存目录,使用–datadir参数指定MySQL真实数据库的文件保存目录,这样即可生成系统数据库文件,也会生成出新的MySQL服务配置文件。

[root@rhel7 mysql-5.6.19]# rm -rf /etc/my.cnf

[root@rhel7 mysql-5.6.19]# cd /usr/local/mysql

[root@rhel7 mysql]# ./scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/var

把系统新生成的MySQL数据库配置文件链接到/etc目录中,然后把程序目录中的开机程序文件复制到/etc/rc.d/init.d目录中,以便通过service命令来管理MySQL数据库服务程序。记得把数据库脚本文件的权限修改成755以便于让用户有执行该脚本的权限:

[root@rhel7 mysql]# ln -s my.cnf /etc/my.cnf

[root@rhel7 mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@rhel7 mysql]# chmod 755 /etc/rc.d/init.d/mysqld

编辑刚复制的MySQL数据库脚本文件,把第46、47行的basedir与datadir参数分别修改为MySQL数据库程序的保存目录和真实数据库的文件内容。

[root@rhel7 mysql]# vim /etc/rc.d/init.d/mysqld

46 basedir=/usr/local/mysql

47 datadir=/usr/local/mysql/var

配置好脚本文件后便可以用service命令启动mysqld数据库服务了。mysqld是MySQL数据库程序的服务名称,注意不要写错。顺带再使用chkconfig命令把mysqld服务程序加入到开机启动项中。

[root@rhel7 mysql]# service mysqld start

[root@rhel7 mysql]# chkconfig mysqld on

MySQL数据库程序自带了许多命令,但是Bash终端的PATH变量并不会包含这些命令所存放的目录,因此我们也无法顺利地对MySQL数据库进行初始化,也就不能使用MySQL数据库自带的命令了。想要把命令所保存的目录永久性地定义到PATH变量中,需要编辑/etc/profile文件并写入追加的命令目录,这样当物理设备在下一次重启时就会永久生效了。如果不想通过重启设备的方式来生效,也可以使用source命令加载一下/ect/profile文件,此时新的PATH变量也可以立即生效了。

[root@rhel7 mysql]# vim /etc/profile

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

[root@rhel7 mysql]# source /etc/profile

MySQL数据库服务程序还会调用到一些程序文件和函数库文件。由于当前是通过源码包方式安装MySQL数据库,因此现在也必须以手动方式把这些文件链接过来。

[root@rhel7 mysql]# mkdir /var/lib/mysql

[root@rhel7 mysql]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

[root@rhel7 mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

[root@rhel7 mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql

现在,MySQL数据库服务程序已经启动,调用的各个函数文件已经就位,PATH环境变量中也加入了MySQL数据库命令的所在目录。接下来准备对MySQL数据库进行初始化,这个初始化的配置过程与MariaDB数据库是一样的,只是最后变成了Thanks for using MySQL!

[root@rhel7 mysql]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we’ll need the current

password for the root user. If you’ve just installed MySQL, and

you haven’t set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none): 此处只需按下回车键

OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.

Set root password? [Y/n] y (要为root管理员设置数据库的密码

New password: 输入要为root管理员设置的数据库密码

Re-enter new password: 再输入一次密码

Password updated successfully!

Reloading privilege tables..

… Success!

By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y (删除匿名账户

… Success!

Normally, root should only be allowed to connect from ‘localhost’. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y (禁止root管理员从远程登录

… Success!

By default, MySQL comes with a database named ‘test’ that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y (删除test数据库并取消对其的访问权限

– Dropping test database…

… Success!

– Removing privileges on test database…

… Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y (刷新授权表,让初始化后的设定立即生效

… Success!

All done! If you’ve completed all of the above steps, your MySQL

installation should now be secure.

Thanks for using MySQL!

Cleaning up…

配置Nginx服务

Nginx是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。目前国内诸如新浪、网易、腾讯等门户站点均已使用了此服务。

Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了CPU与内存的占用率,所以使用Nginx程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少。此外,Nginx具备的模块数量与Apache具备的模块数量几乎相同,而且现在已经完全支持proxy、rewrite、mod_fcgi、ssl、vhosts等常用模块。更重要的是,Nginx还支持热部署技术,可以7×24不间断提供服务,还可以在不暂停服务的情况下直接对Nginx服务程序进行升级。

坦白来讲,虽然Nginx程序的代码质量非常高,代码很规范,技术成熟,模块扩展也很容易,但依然存在不少问题,比如是由俄罗斯人开发的,所以在资料文档方面还并不完善,中文资料的质量更是鱼龙混杂。但是Nginx服务程序在近年来增长势头迅猛,相信会在轻量级Web服务器市场具有不错的未来。

在正式安装Nginx服务程序之前,我们还需要为其解决相关的软件依赖关系,例如用于提供Perl语言兼容的正则表达式库的软件包pcre,就是Nginx服务程序用于实现伪静态功能必不可少的依赖包。下面来解压、编译、生成、安装Nginx服务程序的源码文件:

[root@rhel7 mysql]# cd /usr/local/src

[root@rhel7 src]# tar xzvf pcre-8.35.tar.gz

[root@rhel7 src]# cd pcre-8.35

[root@rhel7 pcre-8.35]# ./configure –prefix=/usr/local/pcre

[root@rhel7 pcre-8.35]# make

[root@rhel7 pcre-8.35]# make install

openssl软件包是用于提供网站加密证书服务的程序文件,在安装该程序时需要自定义服务程序的安装目录,以便于稍后调用它们的时候更可控。

[root@rhel7 pcre-8.35]# cd /usr/local/src

[root@rhel7 src]# tar xzvf openssl-1.0.1h.tar.gz

[root@rhel7 src]# cd openssl-1.0.1h

[root@rhel7 openssl-1.0.1h]# ./config –prefix=/usr/local/openssl

[root@rhel7 openssl-1.0.1h]# make

[root@rhel7 openssl-1.0.1h]# make install

openssl软件包安装后默认会在/usr/local/openssl/bin目录中提供很多的可用命令,我们需要像前面的操作那样,将这个目录添加到PATH环境变量中,并写入到配置文件中,最后执行source命令以便让新的PATH环境变量内容可以立即生效:

就在前面那个后面在加点就好了

[root@rhel7 openssl-1.0.1h]# vim /etc/profile

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

[root@rhel7 openssl-1.0.1h]# source /etc/profile

zlib软件包是用于提供压缩功能的函数库文件。其实Nginx服务程序调用的这些服务程序无需深入了解,只要大致了解其作用就已经足够了:

[root@rhel7 openssl-1.0.1h]# cd /usr/local/src

[root@rhel7 src]# tar xzvf zlib-1.2.8.tar.gz

[root@rhel7 src]# cd zlib-1.2.8

[root@rhel7 zlib-1.2.8]# ./configure –prefix=/usr/local/zlib

[root@rhel7 zlib-1.2.8]# make

[root@rhel7 zlib-1.2.8]# make install

在安装部署好具有依赖关系的软件包之后,创建一个用于执行Nginx服务程序的账户。账户名称可以自定义,但一定别忘记,因为在后续需要调用:

[root@rhel7 zlib-1.2.8]# cd ..

[root@rhel7 src]# useradd www -s /sbin/nologin

在使用命令编译Nginx服务程序时,需要设置特别多的参数,其中,–prefix参数用于定义服务程序稍后安装到的位置,–user与–group参数用于指定执行Nginx服务程序的用户名和用户组。在使用参数调用openssl、zlib、pcre软件包时,请写出软件源码包的解压路径,而不是程序的安装路径:

[root@rhel7 src]# tar xzvf nginx-1.6.0.tar.gz

[root@rhel7 src]# cd nginx-1.6.0/

[root@rhel7 nginx-1.6.0]# ./configure –prefix=/usr/local/nginx –without-http_memcached_module –user=www –group=www –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-openssl=/usr/local/src/openssl-1.0.1h –with-zlib=/usr/local/src/zlib-1.2.8 –with-pcre=/usr/local/src/pcre-8.35

[root@rhel7 nginx-1.6.0]# make

[root@rhel7 nginx-1.6.0]# make install

要想启动Nginx服务程序以及将其加入到开机启动项中,也需要有脚本文件。可惜的是,在安装完Nginx软件包之后默认并没有为用户提供脚本文件,因此我们准备了一份可用的启动脚本文件,大家只需在/etc/rc.d/init.d目录中创建脚本文件并直接复制下面的脚本内容即可(相信各位读者在掌握了第4章的内容之后,应该可以顺利看懂这个脚本文件)。

[root@rhel7 nginx-1.6.0]# vim /etc/rc.d/init.d/nginx

#!/bin/bash

# nginx – this script starts and stops the nginx daemon

# chkconfig: – 85 15

# description: Nginx is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server

# processname: nginx

# config: /etc/nginx/nginx.conf

# config: /usr/local/nginx/conf/nginx.conf

# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ “$NETWORKING” = “no” ] && exit 0

nginx=”/usr/local/nginx/sbin/nginx”

prog=$(basename $nginx)

NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`$nginx -V 2>&1 | grep “configure arguments:” | sed ‘s/[^*]*–user=\([^ ]*\).*/\1/g’ -`

if [ -z “`grep $user /etc/passwd`” ]; then

useradd -M -s /bin/nologin $user

fi

options=`$nginx -V 2>&1 | grep ‘configure arguments:’`

for opt in $options; do

if [ `echo $opt | grep ‘.*-temp-path’` ]; then

value=`echo $opt | cut -d “=” -f 2`

if [ ! -d “$value” ]; then

# echo “creating” $value

mkdir -p $value && chown -R $user $value

fi

fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $”Starting $prog: ”

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $”Stopping $prog: ”

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

#configtest || return $?

stop

sleep 1

start

}

reload() {

#configtest || return $?

echo -n $”Reloading $prog: ”

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case “$1” in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}”

exit 2

esac

保存脚本文件后记得为其赋予755权限,以便能够执行这个脚本。然后以绝对路径的方式执行这个脚本,通过restart参数重启Nginx服务程序,最后再使用chkconfig命令将Nginx服务程序添加至开机启动项中。大功告成!

[root@rhel7 nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx

[root@rhel7 nginx-1.6.0]# /etc/rc.d/init.d/nginx restart

[root@rhel7 nginx-1.6.0]# chkconfig nginx on

[root@rhel7 ~]# firewall-cmd –permanent –add-port=80/tcp

[root@rhel7 ~]# firewall-cmd –reload

Nginx服务程序在启动后就可以在浏览器中输入服务器的IP地址来查看到默认网页了。相较于Apache服务程序的红色默认页面,Nginx服务程序的默认页面显得更加简洁.

配置php服务

PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言,发明于1995年,它吸取了C语言、Java语言及Perl语言的很多优点,具有开源、免费、快捷、跨平台性强、效率高等优良特性,是目前Web开发领域最常用的语言之一。

使用源码包的方式编译安装PHP语言环境其实并不复杂,难点在于解决PHP的程序包和其他软件的依赖关系。为此需要先安装部署将近十个用于搭建网站页面的软件程序包,然后才能正式安装PHP程序。

yasm源码包是一款常见的开源汇编器,其解压、编译、安装过程中生成的输出信息均已省略:

[root@rhel7 ~]# cd /usr/local/src/

[root@rhel7 src]# tar zxvf yasm-1.2.0.tar.gz

[root@rhel7 src]# cd yasm-1.2.0/

[root@rhel7 yasm-1.2.0]# ./configure

[root@rhel7 yasm-1.2.0]# make

[root@rhel7 yasm-1.2.0]# make install

libmcrypt源码包是用于加密算法的扩展库程序,其解压、编译、安装过程中生成的输出信息均已省略:

[root@rhel7 yasm-1.2.0]# cd ..

[root@rhel7 src]# tar zxvf libmcrypt-2.5.8.tar.gz

[root@rhel7 src]# cd libmcrypt-2.5.8/

[root@rhel7 libmcrypt-2.5.8]# ./configure

[root@rhel7 libmcrypt-2.5.8]# make

[root@rhel7 libmcrypt-2.5.8]# make install

libvpx源码包是用于提供视频编码器的服务程序,其解压、编译、安装过程中生成的输出信息均已省略。相信会有很多粗心的读者顺手使用了tar命令的xzvf参数,但如果仔细观察就会发现libvpx源码包的后缀是.tar.bz2,即表示使用bzip2格式进行的压缩,因此正确的解压参数应该是xjvf:

[root@rhel7 libmcrypt-2.5.8]#cd ..

[root@rhel7 src]# tar xjvf libvpx-v1.3.0.tar.bz2

[root@rhel7 src]# cd libvpx-v1.3.0/

[root@rhel7 libvpx-v1.3.0]# ./configure –prefix=/usr/local/libvpx –enable-shared –enable-vp9

[root@rhel7 libvpx-v1.3.0]# make

[root@rhel7 libvpx-v1.3.0]# make install

tiff源码包是用于提供标签图像文件格式的服务程序,其解压、编译、安装过程中生成的输出信息均已省略:

[root@rhel7 libvpx-v1.3.0]# cd ..

[root@rhel7 src]# tar zxvf tiff-4.0.3.tar.gz

[root@rhel7 src]# cd tiff-4.0.3/

[root@rhel7 tiff-4.0.3]# ./configure –prefix=/usr/local/tiff –enable-shared

[root@rhel7 tiff-4.0.3]# make

[root@rhel7 tiff-4.0.3]# make install

libpng源码包是用于提供png图片格式支持函数库的服务程序,其解压、编译、安装过程中生成的输出信息均已省略

[root@rhel7 tiff-4.0.3]# cd ..

[root@rhel7 src]# tar zxvf libpng-1.6.12.tar.gz

[root@rhel7 src]# cd libpng-1.6.12

[root@rhel7 libpng-1.6.12]# ./configure –prefix=/usr/local/libpng –enable-shared

[root@rhel7 libpng-1.6.12]# make

[root@rhel7 libpng-1.6.12]# make install

freetype源码包是用于提供字体支持引擎的服务程序,其解压、编译、安装过程中生成的输出信息均已省略:

[root@rhel7 libpng-1.6.12]# cd ..

[root@rhel7 src]# tar zxvf freetype-2.5.3.tar.gz

[root@rhel7 src]# cd freetype-2.5.3

[root@rhel7 freetype-2.5.3]# ./configure –prefix=/usr/local/freetype –enable-shared

[root@rhel7 freetype-2.5.3]# make

[root@rhel7 freetype-2.5.3]# make install

jpeg源码包是用于提供jpeg图片格式支持函数库的服务程序,其解压、编译、安装过程中生成的输出信息均已省略:

[root@rhel7 freetype-2.5.3]# cd ..

[root@rhel7 src]# tar zxvf jpegsrc.v9a.tar.gz

[root@rhel7 src]# cd jpeg-9a

[root@rhel7 jpeg-9a]# ./configure –prefix=/usr/local/jpeg –enable-shared

[root@rhel7 jpeg-9a]# make

[root@rhel7 jpeg-9a]# make install

libgd源码包是用于提供图形处理的服务程序,其解压、编译、安装过程中生成的输出信息均已省略。在编译libgd源码包时,请记得写入的是jpeg、libpng、freetype、tiff、libvpx等服务程序在系统中的安装路径,即在上面安装过程中使用–prefix参数指定的目录路径:

[root@rhel7 jpeg-9a]# cd ..

[root@rhel7 src]# tar zxvf libgd-2.1.0.tar.gz

[root@rhel7 src]# cd libgd-2.1.0

[root@rhel7 libgd-2.1.0]# ./configure –prefix=/usr/local/libgd –enable-shared –with-jpeg=/usr/local/jpeg –with-png=/usr/local/libpng –with-freetype=/usr/local/freetype –with-fontconfig=/usr/local/freetype –with-xpm=/usr/ –with-tiff=/usr/local/tiff –with-vpx=/usr/local/libvpx

[root@rhel7 libgd-2.1.0]# make

[root@rhel7 libgd-2.1.0]# make install

t1lib源码包是用于提供图片生成函数库的服务程序,其解压、编译、安装过程中生成的输出信息均已省略。安装后把/usr/lib64目录中的函数文件链接到/usr/lib目录中,以便系统能够顺利调取到函数文件:

[root@rhel7 cd libgd-2.1.0]# cd ..

[root@rhel7 src]# tar zxvf t1lib-5.1.2.tar.gz

[root@rhel7 src]# cd t1lib-5.1.2

[root@rhel7 t1lib-5.1.2]# ./configure –prefix=/usr/local/t1lib –enable-shared

[root@rhel7 t1lib-5.1.2]# make

[root@rhel7 t1lib-5.1.2]# make install

[root@rhel7 t1lib-5.1.2]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so

[root@rhel7 t1lib-5.1.2]# cp -frp /usr/lib64/libXpm.so* /usr/lib/

此时终于把编译php服务源码包的相关软件包都已经安装部署妥当了。在开始编译php源码包之前,先定义一个名为LD_LIBRARY_PATH的全局环境变量,该环境变量的作用是帮助系统找到指定的动态链接库文件,这些文件是编译php服务源码包的必须元素之一。编译php服务源码包时,除了定义要安装到的目录以外,还需要依次定义配置php服务程序配置文件的保存目录、MySQL数据库服务程序所在目录、MySQL数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、libvpx、zlib、t1lib等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能:

[root@rhel7 t1lib-5.1.2]# cd ..

[root@rhel7 src]# tar -zvxf php-5.5.14.tar.gz

[root@rhel7 src]# cd php-5.5.14

[root@rhel7 php-5.5.14]# export LD_LIBRARY_PATH=/usr/local/libgd/lib

[root@rhel7 php-5.5.14]# ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql/bin/mysql_config –with-mysql-sock=/tmp/mysql.sock –with-pdo-mysql=/usr/local/mysql –with-gd –with-png-dir=/usr/local/libpng –with-jpeg-dir=/usr/local/jpeg –with-freetype-dir=/usr/local/freetype –with-xpm-dir=/usr/ –with-vpx-dir=/usr/local/libvpx/ –with-zlib-dir=/usr/local/zlib –with-t1lib=/usr/local/t1lib –with-iconv –enable-libxml –enable-xml –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –enable-opcache –enable-mbregex –enable-fpm –enable-mbstring –enable-ftp –enable-gd-native-ttf –with-openssl –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –enable-session –with-mcrypt –with-curl –enable-ctype

[root@rhel7 php-5.5.14]# make

[root@rhel7 php-5.5.14]# make install

 

在php源码包程序安装完成后,需要删除当前默认的配置文件,然后将php服务程序目录中相应的配置文件复制过来:

 

[root@rhel7 php-5.5.14]# rm -rf /etc/php.ini

[root@rhel7 php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini

[root@rhel7 php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini

[root@rhel7 php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

[root@rhel7 php-5.5.14]# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf

 

php-fpm.conf是php服务程序重要的配置文件之一,我们需要启用该配置文件中第25行左右的pid文件保存目录,然后分别将第148和149行的user与group参数分别修改为www账户和用户组名称:

[root@rhel7 php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf

配置妥当后便可把用于管理php服务的脚本文件复制到/etc/rc.d/init.d中了。为了能够执行脚本,请记得为脚本赋予755权限。最后把php-fpm服务程序加入到开机启动项中:

[root@rhel7 php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

[root@rhel7 php-5.5.14]# chmod 755 /etc/rc.d/init.d/php-fpm

[root@rhel7 php-5.5.14]# chkconfig php-fpm on

由于php服务程序的配置参数直接会影响到Web服务服务的运行环境,因此,如果默认开启了一些不必要且高危的功能(如允许用户在网页中执行Linux命令),则会降低网站被入侵的难度,入侵人员甚至可以拿到整台Web服务器的管理权限。因此我们需要编辑php.ini配置文件,在305行的disable_functions参数后面追加上要禁止的功能。下面的禁用功能名单是依据网站运行的经验而定制的,不见得适合每个生产环境,建议大家在此基础上根据自身工作需求酌情删减:

[root@rhel7 php-5.5.14]# vim /usr/local/php/etc/php.ini

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog, readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_sp ace,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,p osix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_ getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix _mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_ setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

这样就把php服务程序配置妥当了。最后,还需要编辑Nginx服务程序的主配置文件,把第2行的井号(#)删除,然后在后面写上负责运行Nginx服务程序的账户名称和用户组名称;在第45行的index参数后面写上网站的首页名称。最后是将第65~71行参数前的井号(#)删除来启用参数,主要是修改第69行的脚本名称路径参数,其中$document_root变量即为网站信息存储的根目录路径,若没有设置该变量,则Nginx服务程序无法找到网站信息,因此会提示”404页面未找到”的报错信息。在确认参数信息填写正确后便可重启Nginx服务与php-fpm服务。

[root@rhel7 php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf

2 user www www;

45 index index.html index.htm index.php;

69 # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

[root@rhel7 php-5.5.14]# systemctl restart nginx

[root@rhel7 php-5.5.14]# systemctl restart php-fpm

至此,LNMP动态网站环境架构的配置实验全部结束。