新网Logo
首页>虚机资讯>

wdOS系统下源码编译安装LNAMP(linux+nginx+apache+mysql+php)

登录 注册

wdOS系统下源码编译安装LNAMP(linux+nginx+apache+mysql+php)

摘要:一.关于LNAMP环境的介绍:    Lnamp环境是由linux + nginx+apache+mysql+php组成的,Nginx做网站前端,Apache后端处理PHP文件。作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品

 

一.关于LNAMP环境的介绍:

Lnamp环境是由linux+nginx+apache+mysql+php组成的,Nginx做网站前端,Apache后端处理PHP文件。作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品结合了Nginx高并发和静态页面高效率以及Apache稳定的动态页面处理特点。这样一来再也不用担心Nginx以FastCGI模式运行PHP时的502问题,也不必担心Apache处理静态页面过慢,负载过高的问题。

1 (93).jpg

 

wdOS是一个基于CentOS版本精简优化过的Linux服务器系统,并集成nginx,apache,php,mysql等web应用环境及wdcp管理系统,可以说安装和使用都非常便利。我这次是选在wdOS的纯系统下安装lnamp环境,但这只是初步的安装,并没有进行mysql以及php的优化。

 

LNAMP的安装中php的编译安装比较麻烦,需要分为两次编译,另外nginx以及apache的配置也比较复杂,apache需要开启虚拟主机的功能,使得apache监听非80端口,nginx反向代理php请求与apache协同工作。

 

二.安装过程:

 

第一步:安装前准备工作

 

创建存放源代码的目录:mkdir/usr/local/src

创建apache的安装目录:mkdir/usr/local/apache

创建php的安装目录:mkdir/usr/local/php

创建mysql的安装目录:mkdir/usr/local/mysql

创建nginx的安装目录:mkdir/usr/local/nginx

 

第二步:下载安装编译需要用到的库文件:

 

1.nginx编译时需要用到的编译库文件

openssl-devel,glib2-devel,pcre-devel,bzip2-devel以及gzip-devel

不过,wdOS系统下默认安装了openssl-devel这个库文件

所以剩下的使用命令yuminstallglib2-develpcre-develbzip2-develgzip-devel下载安装即可

 

2.检查系统是否安装了编译mysql所需要的工具包gcc、gcc-c++,ncurses-devel和camke(mysql5.5版本后不使用configure安装,而是使用cmake来安装)

我们使用rpm-qa|grepgcc和rpm-qa|grepncurses-devel进行检查

也就是说,wdOS系统中还没有安装ncurses-devel,所以我们可以使用yum命令进行安装

下载cmake源代码到/usr/local/src下:

wgethttp://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz

解压缩:tarzxvfcmake-2.8.4.tar.gz

进入/usr/local/src/cmake-2.8.4这个目录下设置,

./bootstrap

gamke:

gmakeinstall

3.下载安装php时需要用到的编译库文件:

yum-yinstalllibeventlibevent-devellibxml2libxml2-devellibmcryptlibmcrypt-devellibmcryptlibmcrypt-develcurl-devellibpng-devellibtool-ltdl-devel

 

第三步:源码编译安装mysql5.5.25a

 

为mysql数据库添加用户和用户组:(我这里假设为mysql用户以及mysql用户组)

groupaddmysql

 

useradd-gmysqlmysql

 

下载mysql源代码:

wget-chttp://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.25a.tar.gz

tarxvfmysql-5.5.25a.tar.gz进行解压缩:

设置编译时的环境参数:

cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-----指定mysql的安装目录

编译make:

安装:makeinstall

在当前目录下,建立配置文件:

cpsupport-files/my-medium.cnf/etc/my.cnf

说明:在展开的源码包目录中的“support-files”文件夹下,提供了多个MySQL服务器的配置文件,分别适用于不同负载的数据库服务器,一般选择my-medium.cnf文件即可,该配置文件适用于中等负载的数据库,可以满足大多数企业的应有需求。

设置软连接使mysql和mysqladmin的bin命令能在shell中直接运行:

创建用于存放mysql数据和日志的目录,并修改目录所有者和属组为mysql:

现在到/etc/my.cnf配置文件下,做下面的修改:

进入mysql安装目录下的脚本目录下的脚本目录:/tmp/mysql-5.5.25a/scripts

先修改mysql_install_db这个文件的权限:

chmod750mysql_install_db

然后,利用mysql_install_db脚本生成新的mysql授权表:

./mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/var/mysql/data&

添加启动脚本:

cp/usr/local/src/mysql-5.5.25a/support-files/mysql.server/etc/rc.d/init.d/mysqld

修改启动脚本:添加basedir以及datadir的路径:

修改启动脚本的权限:

chmod750/etc/rc.d/init.d/mysqld

 

启动数据库:

检查数据库的默认侦听端口3306是否开启:

 

第四步:源码安装apache-2.2.22

 

先下载apache源代码到目录/usr/local/src下:(我这里下载的apache版本为2.2.22)

wget-chttp://apache.etoak.com/httpd/httpd-2.2.22.tar.gz

下载完成之后开始解压缩:(这里给出部分截图)

tar-zxvfhttpd-2.2.22.tar.gz

进入解压缩后的httpd-2.2.22这个目录下,设定编译时的参数:

./configure--prefix=/usr/local/apache----将apache安装在这个目录下

--enable-vhost-alias----支持虚拟主机的功能

--enable-rewrite-----允许重写

--enable-info

开始进行编译:make

编译完进行安装:makeinstall

在当前目录下,复制apache的初始化文件到/etc/init.d目录下,并命名为httpd,修改其权限:

cpbuild/rpm/httpd.init/etc/init.d/httpd

设置Apache开机自启动:(我这里使用的是方法一)

方法一:输入下列命令:

chconfig--addhttpd

chkconfig--level345httpdon

方法二:

编辑vi/etc/init.d/httpd

找到chkconfig:这句,添加345
找到description:这句,添加Apachehttpd

设置完之后你可以输入chkconfig--list|grephttpd检查一下3,4,5是否为on:

修改apache服务器的配置文件:
vi/usr/local/apache/conf/httpd.conf,找到ServerName那一行,去掉前面的注释

为了适应启动脚本,我们创建一些符号链接

重启一下apache服务器:

/etc/init.d/httpdstart

 

第五步:源码编译安装nginx-1.0.4

 

进入/usr/local/src这个目录下载nginx源码:

wget-chttp://nginx.org/download/nginx-1.0.4.tar.gz

 

解压缩nginx源代码包:

tar-zxvfnginx-1.0.4.tar.gz

进入解压好的nginx-1.0.4这个目录配置相应的编译参数:

./configure--user=nginx--group=nginx--prefix=/usr/local/nginx--sbin-path=/usr/sbin/nginx--conf-path=/etc/nginx/nginx.conf--error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log--pid-path=/var/log/run/nginx.pid--lock-path=/var/log/lock/subsys/nginx--with-http_ssl_module--with-http_realip_module--with-http_addition_module--with-http_sub_module--with-http_dav_module--with-http_flv_module--with-http_gzip_static_module--with-http_stub_status_module--with-http_perl_module--with-mail--with-mail_ssl_module--with-http_flv_module--with-http_gzip_static_module--with-http_perl_module--with-mail--without-http_rewrite_module--with-pcre

make进行编译:

编译完就可以进行安装:makeinstall

 

第六步:源码编译安装php-5.3.10

 

说明:php的编译这一步要分为两部分进行,要先编译支持apache模块的,然后再编译支持nginx模块的。如果同时进行编译就会报错:You\'veconfiguredmultipleSAPIstobebuild(见下图:)

所以,我们就先编译支持apache的

这一部分的php编译设置的参数:

./configure--prefix=/usr/local/php--with-mysql=/usr/local/mysql--enable-mbstring--enable-fpm--with-iconv-dir=/usr/local/libiconv--enable-xml--with-curl--with-curlwrappers--with-mhash--with-gd--enable-gd-native-ttf--with-xmlrpc--with-zlib--with-apxs2=/usr/local/apache/bin/apxs--with-config-file-path=/usr/local/php/etc

make

makeimstall

完成后,就可以继续设置支持nginx的编译参数了:

./configure--prefix=/usr/local/php--with-mysql=/usr/local/mysql--enable-mbstring--enable-fpm--with-iconv-dir=/usr/local/libiconv--enable-xml--with-curl--with-curlwrappers--with-mhash--with-gd--enable-gd-native-ttf--with-xmlrpc--with-zlib

然后重复与上面apache相似的步骤,make&makeinstall

 

建立php配置文件:

复制php.ini到php安装目录php.ini-development到/usr/local/php/lib这个目录下并重命名为php.ini:

说明:php.ini是PHP在启动时会读取的配置文件,我这里没有做配置。另外,php5.0版本之后文件的名字发生了改变,其中php.ini-production对应于php.ini-recommended;而php.ini-development对应于php.ini-dist。php.ini-dist适合开发程式使用(也就是测试使用),php.ini-recommended拥有较高的安全性设定,适合上线当产品使用

 

做方便php的运行的链接,不用配置环境变量

完成之后,我们就可以查看php的版本:

 

第七步:整合nginx和php:

 

修改进程管理器php-fpm的配置:

说明:在LAMP平台下,php是被编译成为模块然后被apache所调用;而在LNMP平台下,php是被编译成二进制文件执行,这样就需要通过fastCGI技术来实现nginx和php的整合。这里通过使用fastCGI的一个进程管理器php-fpm,php5.3.3以后的版本已经内置了php-fpm,使用的时候只需要加入参数--enable-fpm就可以由此整合php与nginx

cd/usr/local/php/etc

cpphp-fpm.conf.defaultphp-fpm.conf

进入php-fpm的主配置文件php-fpm.conf,找到图中的部分做相应的修改:

最后就是在/usr/local/nginx/html这个目录下创建一个文件命名为info.php,在里面添加以下测试内容:

完成后可以使用/usr/sbin/nginx来重启nginx服务,如果启动的时候提示:nginx:[emerg]getpwnam("nginx")failed

这时,你只需要vi/etc/nginx/nginx.conf进入到这个文件,将配置文件的第一行中的usernobody这一行的注释去掉即可。

 

第八步:为apache设置虚拟主机,使得apache侦听非80端口

(我这里以同一个ip对应两个不同的端口为例)

 

vi编辑httpd的主配置文件/usr/local/apache/conf/httpd.conf,修改原来的80端口为8080以及8081端口:

同时注释下面这句:

为使Apache支持rewrite(伪静态),注释原来的apache文件根目录

修改Directory模块内容(相当是全局的,以后httpd-vhosts.conf也会用到这个设置),将AllowOverridenone改为all,注释掉下面的order.....

开启了httpd-vhosts虚拟主机文件:

修改完主配置文件,下面就是虚拟配置文件的修改:

vi/usr/local/apache/conf/extra/httpd-vhosts.conf

增加8080以及8081这两个侦听端口:

仿照下图,做相应的修改:(由于我这里没有配置dns服务器,所以servername这句可以用localhost代替)

说明:上图中配置的ErrotLog以及CustomLog中的文件请确保存在,像我这里8081端口中的ErrotLog以及CustomLog中的文件我还没有建立,所以这里先进入到/usr/local/apache/logs目录下然后创建文件:

另外,虚拟主机中用到的文件根目录以及测试文件也应该相应的创建:(cd/usr/local/apache/htdocs)

mkdir8080

mkdir8081

同时将该目录下的index.html复制到8080以及8081这两个目录下:

cpindex.html8080

cpindex.html8081

然后创建一个文件命名为test.php,在里面添加以下测试内容,用以测试mysql是否能与php协同工作:

将这个文件复制到8080以及8081这两个目录下:

cptest.php8080

cptest.php8081

 

第九步:Nginx采用反Nginx采用反向代理的方式接收Apache的处理结果

 

说明:Nginx采用反向代理的方式接收Apache的处理结果,需要先写一些代理的参数,可以将下面的配置保存为proxy_params,以后每个用到proxy_pass的地方都把proxy_params这些参数include进来。

在/etc/nginx/这个目录下新建一个proxy_params文件(touchproxy_params),然后添加下面的代理参数: 

附:代理参数的注解

proxy_redirecthttp://$scheme://#重定向

proxy_set_headerHost$host;#转发IP等HTTP头信息

proxy_set_headerX-Real-IP$remote_addr;

proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#与后端发起握手等待响应超时时间

proxy_connect_timeout30;#与后端连接成功后等待响应时间(已进入处理队列等候处理)

proxy_read_timeout60;#后端服务器回传数据时间(后端必须在指定时间内将数据传送完毕)

proxy_send_timeout30;#保存用户的头信息大小

proxy_buffers8128k;#高负载时可请求更大proxy_buffers(一般设为proxy_buffers的两倍)

然后在/etc/nginx/nginx.conf这个文件中用到proxy_pass的地方都把proxy_params这些参数include进来:

下面是我从网上搜来的rewrite规则:(规则要放在配置文件的location/{}外面,server{}里面)

try_files$uri$uri/@apache;

location@apache{

proxy_passhttp://127.0.0.1:80;-----这里的127.0.0.1改为自己的ip地址

includeproxy_params;

}

说明:跟LNMP相比,rewrite规则显得麻烦很多,因为Nginx的rewrite和Apache的rewrite是串行处理的,即Nginx进行rewrite之后,如果处理后的请求被交给Apache,那么Apache又会再根据自己的rewriterule再处理;相反Apache的rewrite结果就不会再交回Nginx处理。所以,避免麻烦的方法是,只让Nginx做rewrite,因为Nginx的rewrite效率比Apache的高。

 

另外,Nginx的Rewrite功能需要用到PCRE(正式表达式库)可以使用

wgethttp://sourceforge.net/projects/pcre/files/pcre/8.01/pcre-8.01.tar.gz下载pcre源码包,然后编译安装(make,makeinstall)

安装完之后,在nginx的配置参数中加入--withpcre,然后重新编译安装即可。否则会报nginx:[emerg]theusingoftheregex".php$"requiresPCRElibraryin/etc/nginx/nginx.conf:68这样的错,如下图:

第十步:为apache安装rpaf模块

说明:rpaf这个模块用于apache做后端时可以获取访客真实的IP

先下载源码到/usr/local/src这个目录下:

wgethttp://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

解压缩这个源码包:

tar-zxfmod_rpaf-0.6.tar.gz

进入mod_rpaf-0.6这个目录下:

/usr/local/apache/bin/apxs-i-c-nmod_rpaf-2.0.somod_rpaf-2.0.c

这样rpaf模块就安装完成了。

修改httpd主配置文件/usr/local/apache/conf/httpd.conf:

找到LoadModule添加加载rpaf模块的语句:

LoadModulerpaf_modulemodules/mod_rpaf-2.0.so

同时在IfModule添加下面这段:

全部设置完成后重启一下各项服务:

/usr/sbin/nginx启动(/usr/sbin/nginx-sreload重启)nginx服务

servicehttpdrestart重启httpd服务

重启完成后可以输入netstat-lnpt查看下端口是否开启:

其中3306为mysqld的侦听端口,9000为php-fpm进程管理器的侦听端口,80为nginx的侦听端口,8080和8081均为httpd的侦听端口

三.测试结果:

虚拟主机的测试:(8081端口)

在8081端口中关于mysql与php协同工作的测试:

8080端口的测试:

在8080端口中关于mysql与php系统工作的测试:

Nginx侦听的80端口的测试:

附:关于rewrite语法的一些介绍:

rewrite的语法

语法:rewriteregexreplacementflag

默认:none

作用域:server,location,if

这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。

注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。

rewrite只是会改写路径部分的东东,不会改动用户的输入参数,因此这里的if规则里面,你无需关心用户在浏览器里输入的参数,rewrite后会自动添加的,因此,我们只是加上了一个?号和后面我们想要的一个小小的参数***https=1就可以了。

nginx的rewrite规则参考:

1~为区分大小写匹配

2~*为不区分大小写匹配

3!~和!~*分别为区分大小写不匹配及不区分大小写不匹

4-f和!-f用来判断是否存在文件

5-d和!-d用来判断是否存在目录

6-e和!-e用来判断是否存在文件或目录

7-x和!-x用来判断文件是否可执行

8last相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的

9break终止匹配,不再匹配后面的规则

10redirect返回302临时重定向地址栏会显示跳转后的地址

11permanent返回301永久重定向地址栏会显示跳转后的地址